File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Beginning Java and the fly likes BigDecimal Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "BigDecimal" Watch "BigDecimal" New topic


Ashutosh Deo

Joined: Jul 12, 2006
Posts: 10
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?
Ulf Dittmer

Joined: Mar 22, 2005
Posts: 42965
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 for some background information.

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

Joined: Dec 13, 2007
Posts: 95

I agree with Ulf.
An another approach is to multiply the double value for a number (like 1000) that makes the double an int.
Ulf Dittmer

Joined: Mar 22, 2005
Posts: 42965
An int has even less precision than a double (around 10 digits), and a long has around 19, so neither of those would work in this case.
I agree. Here's the link:
subject: BigDecimal
It's not a secret anymore!