Tried as below
String d=new String(\"12.00\");
Double dble =new Double(d.valueOf(d));
System.out.println(dble);
Output: 12.0
But i
You have not lost any precision, 12.0 is exactly equal to 12.00. If you want to display or print it with 2 decimal places, use java.text.DecimalFormat
Use BigDecimal Instead of a double:
String d = "12.00"; // No need for `new String("12.00")` here
BigDecimal decimal = new BigDecimal(d);
This works because BigDecimal maintains a "precision," and the BigDecimal(String) constructor sets that from the number of digits to the right of the ., and uses it in toString. So if you just dump it out with System.out.println(decimal);, it prints out 12.00.
Your problem is not a loss of precision, but the output format of your number and its number of decimals. You can use DecimalFormat to solve your problem.
DecimalFormat formatter = new DecimalFormat("#0.00");
String d = new String("12.00");
Double dble = new Double(d.valueOf(d));
System.out.println(formatter.format(dble));
I will also add that you can use DecimalFormatSymbols to choose which decimal separator to use. For example, a point :
DecimalFormatSymbols separator = new DecimalFormatSymbols();
separator.setDecimalSeparator('.');
Then, while declaring your DecimalFormat :
DecimalFormat formatter = new DecimalFormat("#0.00", separator);
If you want to format output, use PrintStream#format(...):
System.out.format("%.2f%n", dble);
There %.2f - two places after decimal point and %n - newline character.
If you don't want to use PrintStream#format(...), use DecimalFormat#format(...).