5

尝试如下

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

输出:12.0

但我想获得 12.00 精度

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

4

4 回答 4

8

使用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

于 2013-03-08T16:07:13.700 回答
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);
于 2013-03-08T16:08:53.477 回答
2

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

于 2013-03-08T16:10:00.197 回答
1

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

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

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

更新:

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

于 2013-03-08T16:09:18.450 回答