如何使用 BigDecimal 正确计算有理数

How to properly calculate rational by using BigDecimal

当我需要使用 BigDecimal 时如何在不损失精度的情况下获得正确答案。

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

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

在这种情况下,我怎样才能得到准确的 300?

谢谢!

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

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

具体到您的情况,您还可以尝试重写等式以防止发生任何舍入:a / b * c = c / b * a.