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
Joined: Jan 14, 2005
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.
Joined: Jun 05, 2003
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
Joined: Jan 07, 2005
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.