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

标签 java bigdecimal

为什么 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/

相关文章:

java - 在 Collectors.groupingBy 中将 null 和空记录视为相同

java - android-java 如何取消异步任务

java - 如何将 BigDecimal 乘以 Java 中的整数

java - 迁移到 Java 1.4 到 Java 1.5+ 时避免 BigDecimal 的问题

java - BigDecimal.add() 被忽略

java - 是否有一个图像设计社区可以与开发人员合作来创建具有更好、更优美的外观和感觉的应用程序?

java - 如何让这个程序计算用户输入单词中的元音?

java - BrightScript Eclipse 插件在 OSX 上安装后不显示

xsd - 如何告诉 jaxb 在编码到 xml 时截断 BigDecimal?

java - 大数减法