# BigDecimal

Ashutosh Deo

Greenhorn

Posts: 10

posted 7 years ago

I have to retain the exact value of a Double and convert it into a string.

Double value = 105312453566.35363465;

I tried doing a toString() on the above Double value... but it returns me an output 1.0531245356635364E11

Hence I tried converting it into a BigDecimal format using the below code... so that I can retain the exact value..

BigDecimal newValue = new BigDecimal(value);

System.out.println("BigDecimal Value: " + newValue);

But the output which I get is like this :

BigDecimal Value: 105312453566.3536376953125

which is again not what I want.

How can I get the exact value?

Double value = 105312453566.35363465;

I tried doing a toString() on the above Double value... but it returns me an output 1.0531245356635364E11

Hence I tried converting it into a BigDecimal format using the below code... so that I can retain the exact value..

BigDecimal newValue = new BigDecimal(value);

System.out.println("BigDecimal Value: " + newValue);

But the output which I get is like this :

BigDecimal Value: 105312453566.3536376953125

which is again not what I want.

How can I get the exact value?

Ulf Dittmer

Rancher

Posts: 42967

73

posted 7 years ago

That number has 20 digits, and doubles simply do not have that much accuracy. Around 16 digits is the most number of accurate digits that's possible. See #20 in the http://faq.javaranch.com/java/JavaBeginnersFaq for some background information.

The solution to your problem is to use the BigDecimal(String) constructor. It retains all digits of its parameter.

The solution to your problem is to use the BigDecimal(String) constructor. It retains all digits of its parameter.

It is sorta covered in the JavaRanch Style Guide. |