Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Agile forum!

# BigDecimal compareTo() problem

Joe Busch
Greenhorn
Posts: 12
I have 3 BigDecimal variables: a, b and c. I then do the following test:

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
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
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
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.