diff options
| author | Mike Buland <mike@xagasoft.com> | 2013-05-09 15:44:34 -0600 |
|---|---|---|
| committer | Mike Buland <mike@xagasoft.com> | 2013-05-09 15:44:34 -0600 |
| commit | 0e5e01b4d0d5f3f872d97c95bd57fd057e4fd5a1 (patch) | |
| tree | 1e6a657c57ceeda4d699f1f0b55ad033e3cacf7b /src/number.cpp | |
| parent | ce68e816bd82612c14f3492e8bc969da9bfab06c (diff) | |
| download | clic-0e5e01b4d0d5f3f872d97c95bd57fd057e4fd5a1.tar.gz clic-0e5e01b4d0d5f3f872d97c95bd57fd057e4fd5a1.tar.bz2 clic-0e5e01b4d0d5f3f872d97c95bd57fd057e4fd5a1.tar.xz clic-0e5e01b4d0d5f3f872d97c95bd57fd057e4fd5a1.zip | |
Added Number::toRadix & Number::set( int32_t ).
Both very handy. I'll add other numeric setters later, it was very
easy.
Diffstat (limited to 'src/number.cpp')
| -rw-r--r-- | src/number.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
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 ) | |||
| 358 | iRadix = sNum.iRadix; | 358 | iRadix = sNum.iRadix; |
| 359 | } | 359 | } |
| 360 | 360 | ||
| 361 | void Number::set( int32_t iNum ) | ||
| 362 | { | ||
| 363 | aFrac.zero(); | ||
| 364 | aInt.clear(); | ||
| 365 | while( iNum > 0 ) | ||
| 366 | { | ||
| 367 | aInt.append( iNum%iRadix ); | ||
| 368 | iNum /= iRadix; | ||
| 369 | } | ||
| 370 | } | ||
| 371 | |||
| 361 | void Number::divide( const Number &rhs, Number &q, Number &r ) const | 372 | void Number::divide( const Number &rhs, Number &q, Number &r ) const |
| 362 | { | 373 | { |
| 363 | if( rhs.iScale > 0 ) | 374 | if( rhs.iScale > 0 ) |
| @@ -598,6 +609,25 @@ int32_t Number::toInt32() const | |||
| 598 | return ret; | 609 | return ret; |
| 599 | } | 610 | } |
| 600 | 611 | ||
| 612 | Number Number::toRadix( int iNewRadix, int iNewScale ) const | ||
| 613 | { | ||
| 614 | if( iNewScale < 0 ) | ||
| 615 | iNewScale = iScale; | ||
| 616 | Number ret( iNewScale, iNewRadix ); | ||
| 617 | |||
| 618 | Number me( 0, iRadix ); | ||
| 619 | me = *this; | ||
| 620 | Number n( 0, iRadix ); | ||
| 621 | n.set( iNewRadix ); | ||
| 622 | while( !me.isZero() ) | ||
| 623 | { | ||
| 624 | ret.aInt.append( (me%n).toInt32() ); | ||
| 625 | me = me / n; | ||
| 626 | } | ||
| 627 | |||
| 628 | return ret; | ||
| 629 | } | ||
| 630 | |||
| 601 | Number Number::add( const Number &rhs, bool bSub ) const | 631 | Number Number::add( const Number &rhs, bool bSub ) const |
| 602 | { | 632 | { |
| 603 | Number ret( Bu::buMax(iScale,rhs.iScale), iRadix ); | 633 | Number ret( Bu::buMax(iScale,rhs.iScale), iRadix ); |
