This is Sun’s official advice:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html

BigDecimal class provides methods and properties for hendling numbers in very precise manner.

Let’s see how to use this class:

First of all, create BigDecimal object. For example:

BigDecimal result = new BigDecimal(0.00);

And let’s say we have two values to substract or multiply:

1234.123456789776 and 0.3888377362

In order to do this , java.math.BigDecimal has

BigDecimal add(BigDecimal augend) method for substracting numbers.

or

BigDecimal multiply(BigDecimal multiplicand) method for multiplying numbers

These, offcourse, are not the only method in this class. There are also other methods for mathematical operations. This was just taken for example…

Code:

result = (new BigDecimal(1234.123456789776)).add(new BigDecimal(0.3888377362));

To display the result, you can use the BigDecimal class's toString() method:

System.out.println(result.toString());

and the result would be:

1234.512294525975900694181319749986869283020496368408203125

Or you can display result using, for example BigDecimal class's doublevalue() method:

System.out.println(Double.toString(result.doubleValue()));

Which gives result:

1234.512294525976

Great thing about this class is ability to complitely control how some number needs to be rounded. In order to do this, we can use BigDecimal class's setScale() method.

In order to use it, you just need to specify how many decimal places you would like your number to have, and the logic of rounding it.

There are a lot ways to round it:

ROUND_CEILING

ROUND_DOWN

ROUND_FLOOR

ROUND_HALF_DOWN

ROUND_HALF_EVEN

ROUND_HALF_UP

and many more…

For example, if we want to round our result to 2 decimal places, and to round it with ROUND_HALF_UP method, call:

result = result.setScale(2,BigDecimal.ROUND_HALF_UP);

and then, the result will be:

1234.51

for

System.out.println(result.toString());

and for

System.out.println(Double.toString(result.doubleValue()));

I never used this class before, untill today, when I noticed some wrong results while working on some software that needed very presice results…

BigDecimal class solved my problems…