保留小数点后两位,小数部分相同,结果不一致
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
输出与上面相同,应与小数部分相同。
答案 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