posted 13 years ago

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

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

Joe Busch

Greenhorn

Posts: 12

posted 13 years ago

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.

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.