From 0e5e01b4d0d5f3f872d97c95bd57fd057e4fd5a1 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Thu, 9 May 2013 15:44:34 -0600 Subject: Added Number::toRadix & Number::set( int32_t ). Both very handy. I'll add other numeric setters later, it was very easy. --- src/number.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/number.cpp') diff --git a/src/number.cpp b/src/number.cpp index eb4d01d..cab7f46 100644 --- a/src/number.cpp +++ b/src/number.cpp @@ -358,6 +358,17 @@ void Number::set( const Number &sNum ) iRadix = sNum.iRadix; } +void Number::set( int32_t iNum ) +{ + aFrac.zero(); + aInt.clear(); + while( iNum > 0 ) + { + aInt.append( iNum%iRadix ); + iNum /= iRadix; + } +} + void Number::divide( const Number &rhs, Number &q, Number &r ) const { if( rhs.iScale > 0 ) @@ -598,6 +609,25 @@ int32_t Number::toInt32() const return ret; } +Number Number::toRadix( int iNewRadix, int iNewScale ) const +{ + if( iNewScale < 0 ) + iNewScale = iScale; + Number ret( iNewScale, iNewRadix ); + + Number me( 0, iRadix ); + me = *this; + Number n( 0, iRadix ); + n.set( iNewRadix ); + while( !me.isZero() ) + { + ret.aInt.append( (me%n).toInt32() ); + me = me / n; + } + + return ret; +} + Number Number::add( const Number &rhs, bool bSub ) const { Number ret( Bu::buMax(iScale,rhs.iScale), iRadix ); -- cgit v1.2.3