尝试如下
String d=new String("12.00");
Double dble =new Double(d.valueOf(d));
System.out.println(dble);
输出:12.0
但我想获得 12.00 精度
请让我知道在字符串类中不使用 format() 方法的正确方法
尝试如下
String d=new String("12.00");
Double dble =new Double(d.valueOf(d));
System.out.println(dble);
输出:12.0
但我想获得 12.00 精度
请让我知道在字符串类中不使用 format() 方法的正确方法
使用BigDecimal
代替双精度:
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);
,它就会打印出来12.00
。
您的问题不是精度损失,而是您的数字的输出格式及其小数位数。你可以用它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);
您没有丢失任何精度,12.0 正好等于 12.00。如果要显示或打印 2 位小数,请使用java.text.DecimalFormat
如果要格式化输出,请使用PrintStream#format(...):
System.out.format("%.2f%n", dble);
有%.2f
- 小数点后两位和%n
- 换行符。
如果您不想使用PrintStream#format(...)
,请使用DecimalFormat#format(...)
.