Yo Al - 4 months ago 8
Java Question

# BigDecimal to string

I have a BigDecimal object and i want to convert it to string.
The problem is that my value got fraction and i get a huge number (in length) and i only need the original number in string for example:
for

``````BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());
``````

the output is:

``````10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375
``````

and i need the out put to be exactly the number
`10.0001`
in string

To get exactly `10.0001` you need to use the String constructor or `valueOf` (which constructs a BigDecimal based on the canonical representation of the double):

``````BigDecimal bd = new BigDecimal("10.0001");
System.out.println(bd.toString()); // prints 10.0001
//or alternatively
BigDecimal bd = nBigDecimal.valueOf(10.0001);
System.out.println(bd.toString()); // prints 10.0001
``````

The problem with `new BigDecimal(10.0001)` is that the argument is a `double` and it happens that doubles can't represent `10.0001` exactly. So `10.0001` is "transformed" to the closest possible double, which is `10.000099999999999766941982670687139034271240234375` and that's what your `BigDecimal` shows.

For that reason, it rarely makes sense to use the double constructor.

You can read more about it here, Moving decimal places over in a double

Source (Stackoverflow)