Java RoundingMode HALF_UP未按预期向上舍入

时间:2017-12-12 20:56:03

标签: java double rounding

所以我有这个代码

public String getRounded(double amount) {
    DecimalFormat df = new DecimalFormat("0.00");
    df.setRoundingMode(RoundingMode.HALF_UP);
    System.out.println(df.format(amount));
    System.out.println(amount);
    return df.format(amount);
}

我添加了这两行来查看差异,这是他们展示的一个例子。

输出就是这样的:

1.25

1.255

为什么会这样? HALF_UP的重点不在于此吗?我已经尝试过使用CEILING了,它确实可以完成,虽然在这种情况下这不是我想要的。

谢谢

1 个答案:

答案 0 :(得分:5)

double骗你。 System.out.println对你说谎。

amount不完全是1.255。它实际上是1.25499999999999989341858963598497211933135986328125,小于确切的实数1.255。

使用HALF_UP舍入,正确地返回1.25。

如果你关心这样的细微差别,你需要从一开始就使用BigDecimal。