首页 > 解决方案 > 在 Java 中使用 BigDecimal 理解数学运算

问题描述

使用 Java(JDK 1.8.0_66 和 JDK 1.8.0_181)及其内置的 BigDecimal 类,同时执行以下操作:

    BigDecimal res = new BigDecimal("290");
    BigDecimal sub = new BigDecimal("22");
    sub = sub.subtract(new BigDecimal("7"));
    sub = sub.subtract(new BigDecimal("4"));
    res = res.divide(new BigDecimal("22"), 2, RoundingMode.HALF_EVEN);
    res = res.multiply(sub);
    res = res.setScale(2, RoundingMode.HALF_EVEN);

结果为 144.98,而预期为 145。

为什么会这样?我尝试过本地和在线编译器。设置规模是否为时已晚?我怎样才能得到更准确的计算?

该公式用于表示货币价值计算。

标签: javabigdecimal

解决方案


正确答案是 144.98。您计算 290/22 到小数点后两位的精度。结果是 13.18。而 13.18*11 就是 144.98

如果您的计算是“如果我分 11 次等额分期付款 145 美元,分期付款应该有多大”,您将不得不将 2 美分的差额添加到分期付款中。


推荐阅读