繁体   English   中英

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

[英]How can I convert String to Double without losing precision in Java?

试过如下

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

输出:12.0

但我希望得到12.00精度

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

您的问题不是精度损失,而是数字的输出格式及其小数位数。 您可以使用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);

使用BigDecimal而不是double:

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

这是有效的,因为BigDecimal维护一个“精度”,而BigDecimal(String)构造函数从数字右边的位数设置. ,并在toString使用它。 所以如果你只是用System.out.println(decimal);将其转储出去System.out.println(decimal); ,打印出12.00

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

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

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

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

更新:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM