如何在不损失Java精度的情况下将String转换为Double?

时间:2013-03-08 16:06:01

标签: java

尝试如下

String d=new String("12.00");
Double dble =new Double(d.valueOf(d));
System.out.println(dble);

输出: 12.0

但我希望得到12.00精度

请不要在字符串类

中使用format()方法让我知道正确的方法

4 个答案:

答案 0 :(得分:8)

您的问题不是精度损失,而是数字的输出格式及其小数位数。您可以使用DecimalFormat来解决问题。

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));

我还要补充一点,您可以使用DecimalFormatSymbols来选择要使用的小数分隔符。例如,一点:

DecimalFormatSymbols separator = new DecimalFormatSymbols();
separator.setDecimalSeparator('.');

然后,在宣布您的DecimalFormat

DecimalFormat formatter = new DecimalFormat("#0.00", separator);

答案 1 :(得分:7)

使用BigDecimal而不是双倍:

String d = "12.00"; // No need for `new String("12.00")` here
BigDecimal decimal = new BigDecimal(d);

这可行,因为BigDecimal维护“精度”,BigDecimal(String)构造函数从.右侧的位数设置,并在{{1}中使用它}}。因此,如果您使用toString将其转储出来,则会打印出System.out.println(decimal);

答案 2 :(得分:2)

你没有失去任何精确度,12.0正好等于12.00。如果要显示或打印2位小数,请使用java.text.DecimalFormat

答案 3 :(得分:1)

如果要格式化输出,请使用PrintStream#format(...)

System.out.format("%.2f%n", dble);

%.2f - 小数点后两位和%n - 换行符。

UPDATE:

如果您不想使用PrintStream#format(...),请使用DecimalFormat#format(...)