为什么 BigDecimal 除法会导致舍入发生,即使该值应该适合 4 个有效数字?
BigDecimal realPercent = new BigDecimal(1.25, new MathContext(4));
// 1.25
BigDecimal percentDivider = new BigDecimal(100, new MathContext(4));
realPercent = realPercent.divide(percentDivider, BigDecimal.ROUND_HALF_UP);
// 0.01
通过设置方法调用的精度,可以使除法的行为像我想要的那样,但这并不能解释为什么它还没有这样做。
realPercent.divide(percentDivider, 4, BigDecimal.ROUND_HALF_UP)
// 0.0125
最佳答案
来自Javadoc 除法(BigDecimal,RoundingMode)
:
Returns a
BigDecimal
whose value is(this / divisor)
, and whose scale isthis.scale()
最后一部分很重要 - 初始值的小数位数是 2(未缩放的值为 125)。因为您调用了固定比例的重载,所以最接近的可用结果是scale=2,unscaled=1,即0.01。
关于java - 为什么当 BigDecimal 应该适合有效数字时,除法会导致舍入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43974081/