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

use*_*073 4 java

试过如下

String d=new String("12.00");
Double dble =new Double(d.valueOf(d));
System.out.println(dble);
Run Code Online (Sandbox Code Playgroud)

输出:12.0

但我希望得到12.00精度

请不要在字符串类中使用format()方法让我知道正确的方法

Rob*_*Rob 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));
Run Code Online (Sandbox Code Playgroud)

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

DecimalFormatSymbols separator = new DecimalFormatSymbols();
separator.setDecimalSeparator('.');
Run Code Online (Sandbox Code Playgroud)

然后,在宣布你的时候DecimalFormat:

DecimalFormat formatter = new DecimalFormat("#0.00", separator);
Run Code Online (Sandbox Code Playgroud)


Per*_*ror 7

使用BigDecimal而不是双倍:

String d = "12.00"; // No need for `new String("12.00")` here
BigDecimal decimal = new BigDecimal(d);
Run Code Online (Sandbox Code Playgroud)

这样做是因为BigDecimal保持了"精度",并且BigDecimal(String)构造函数从数字的右边开始设置.,并使用它toString.因此,如果您将其丢弃System.out.println(decimal);,则打印出来12.00.