在 Java 中使用 BigDecimal 了解数学运算
Understand mathematical operations using BigDecimal in Java
使用 Java(JDK 1.8.0_66 和 JDK 1.8.0_181)及其内置的 BigDecimal class 而执行以下操作:
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。
为什么会这样?我试过本地和在线编译器。
设置规模是否为时已晚?我怎样才能得到更准确的计算?
此公式用于表示货币价值计算。
正确答案是 144.98。您将 290/22 计算为两位小数的精度。结果是 13.18。而 13.18*11 是 144.98
如果您的计算结果是 "if I were to pay 5 in 11 equal installments, how big should the installments be",则您必须取 2 美分的差额并将其添加到分期付款中。
使用 Java(JDK 1.8.0_66 和 JDK 1.8.0_181)及其内置的 BigDecimal class 而执行以下操作:
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。
为什么会这样?我试过本地和在线编译器。 设置规模是否为时已晚?我怎样才能得到更准确的计算?
此公式用于表示货币价值计算。
正确答案是 144.98。您将 290/22 计算为两位小数的精度。结果是 13.18。而 13.18*11 是 144.98
如果您的计算结果是 "if I were to pay 5 in 11 equal installments, how big should the installments be",则您必须取 2 美分的差额并将其添加到分期付款中。