java - 在 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。
为什么会这样?我尝试过本地和在线编译器。设置规模是否为时已晚?我怎样才能得到更准确的计算?
该公式用于表示货币价值计算。
解决方案
正确答案是 144.98。您计算 290/22 到小数点后两位的精度。结果是 13.18。而 13.18*11 就是 144.98
如果您的计算是“如果我分 11 次等额分期付款 145 美元,分期付款应该有多大”,您将不得不将 2 美分的差额添加到分期付款中。
推荐阅读
- c++ - 基于数组大小有效性的专业化
- git - dtrain22 拒绝 *github 存储库* 的权限。错误 403
- c - 了解使用管道在父进程和子进程之间进行通信
- swift - Xcode缺少Sqlite.swift所需的模块'SQLiteObjc'
- azure-devops - 将 ADF 管道、数据集等导出到另一个 subsctiption 的最佳实践
- oozie - 设置一个在几次运行后停止的 oozie
- database - 视图表中的重复行
- swift - 我的图像在我的表格视图中没有按顺序加载
- javascript - React Native Switch 和 Toggle API 调用
- angular - 如何将数据传递给组件内的 HTML 代码?