如何使用 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
.
当我需要使用 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
.