java - 如何使用 BigDecimal 正确计算有理数
问题描述
当我需要使用 BigDecimal 而不会丢失精度时,如何获得正确的答案。
BigDecimal a = new BigDecimal(0.5);
BigDecimal b = new BigDecimal(30);
BigDecimal c = new BigDecimal(18000);
a.divide(b).multiply(c);
在这种情况下,我怎么能得到确切的 300?
谢谢!
解决方案
为此,您可以在方法中使用MathContext参数。divide
例如,a.divide(b, MathContext.DECIMAL128).multiply(c);
将为您提供所需的精度(误差幅度为1e-32
)。如果您不想丢失任何精度,可以使用MathContext.UNLIMITED
,但这将导致非终止的十进制扩展。
具体而言,您还可以尝试重写方程式以防止发生任何舍入a / b * c = c / b * a
:
推荐阅读
- ionic-framework - 如何在 div 中触发具有 ionchange 的函数?
- mysql - Mysql ON UPDATE CURRENT_TIMESTAMP 与更新后将时间设置为 now() 的触发器
- struct - 一个键在多个相同类型的结构上的映射是否可能?
- sql-server - ColdFusion 11 和 Microsoft SQL Server 2017 之间是否存在任何已知问题?
- python - QSortFilterProxyModel 过滤器问题
- ruby-on-rails - 如何将 rails devise sign_in 路径设置为根 url
- c# - 如何在源代码管理中包含文件并稍后编辑
- reactjs - 刷新应用程序时,React Native Modals 保持打开状态
- c++ - opencv光流算法多线程实现没有加速
- android - 有没有办法修复无法从生成的 apk 中的 index.android.bundle 加载脚本?