| Author |
BigDecimal compareTo() problem
|
Joe Busch
Greenhorn
Joined: Jan 07, 2005
Posts: 12
|
|
I have 3 BigDecimal variables: a, b and c. I then do the following test: if( a.add(b).compareTo(c) == 0 ) a = 49.9900000000000001827363995 b = 50.01 c = 100 This sum does not equal zero. How do I set the scale/rounding for all three BigDecimals to get the desired result to equal zero? These are dollar and cents amounts. Thanks, Joe
|
 |
M Beck
Ranch Hand
Joined: Jan 14, 2005
Posts: 323
|
|
|
is there any particular reason you have to use BigDecimal in particular to work with these dollar-and-cent amounts? couldn't you just use integers and BigIntegers to work with whole numbers of cents instead? then you wouldn't need to round anything at all.
|
 |
Barry Higgins
Ranch Hand
Joined: Jun 05, 2003
Posts: 89
|
|
Firstly the way I'm running your code actually works fine and returns true However if you want it to make it bullet-proof you could try the following Hope this helps, Barry
|
 |
Joe Busch
Greenhorn
Joined: Jan 07, 2005
Posts: 12
|
|
Thanks. I should be calling setScale(2, BigDecimal.ROUND_HALF_UP) on each BigDecimal I use, then the compares work properly. I guess I could have also used a long and moved the dollar amounts, including pennies, into them. However I would then need to convert double to long as well as strings. Since I have only a small number of computations, BigDecimal was the quickest approach. Thanks again for your solution.
|
 |
 |
|
|
subject: BigDecimal compareTo() problem
|
|
|