gpt4 book ai didi

java - 为什么当 BigDecimal 应该适合有效数字时,除法会导致舍入?

转载 作者:行者123 更新时间:2023-12-01 20:25:05 25 4
gpt4 key购买 nike

为什么 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 is this.scale()

最后一部分很重要 - 初始值的小数位数是 2(未缩放的值为 125)。因为您调用了固定比例的重载,所以最接近的可用结果是scale=2,unscaled=1,即0.01。

关于java - 为什么当 BigDecimal 应该适合有效数字时,除法会导致舍入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43974081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com