相同的小数点,舍入结果不同?

时间:2019-04-12 06:13:38

标签: java java-8 rounding

保留小数点后两位,小数部分相同,结果不一致

jdk1.8.0_162

DecimalFormat df = new DecimalFormat("##.00");
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println("1.985 ≈ " + df.format(1.985));
System.out.println("23.985 ≈ " + df.format(23.985));
1.985 ≈ 1.99
23.985 ≈ 23.98

输出与上面相同,应与小数部分相同。

2 个答案:

答案 0 :(得分:4)

这是floating point类型的工作方式。它们可以是一个近似值。您的两个数字的近似值不同,因为它们不是相同的数字。内部一个数字可能是1.985000000000001,另一个数字可能是23.98499999999999。另请参见here

答案 1 :(得分:0)

您看到的问题来自于在代码中指定“ 23.985”,当 表示为双精度时,该值要小一些。

一个可能的解决方案(如果您绝对需要正确的方法)是使用BigDecimal.valueOf创建值。例如

//BigDecimal bd = BigDecimal.valueOf(23.985);
BigDecimal bd = new BigDecimal("23.985");
System.out.println("bd=" + bd);     
System.out.println(df.format(bd));  // expected == actual