首页 > 解决方案 > 如何使用 BigDecimal 正确计算有理数

问题描述

当我需要使用 BigDecimal 而不会丢失精度时,如何获得正确的答案。

BigDecimal a = new BigDecimal(0.5);
BigDecimal b = new BigDecimal(30);
BigDecimal c = new BigDecimal(18000);

a.divide(b).multiply(c);

在这种情况下,我怎么能得到确切的 300?

谢谢!

标签: javaprecisionbigdecimal

解决方案


为此,您可以在方法中使用MathContext参数。divide

例如,a.divide(b, MathContext.DECIMAL128).multiply(c);将为您提供所需的精度(误差幅度为1e-32)。如果您不想丢失任何精度,可以使用MathContext.UNLIMITED,但这将导致非终止的十进制扩展。

具体而言,您还可以尝试重写方程式以防止发生任何舍入a / b * c = c / b * a


推荐阅读