繁体   English   中英

BigDecimal和MathContext

[英]BigDecimal and MathContext

有人可以解释为什么这两个结果不同吗?

BigDecimal bd1 = new BigDecimal(1234.5678)
    .divide(
        new BigDecimal(1.19),
        4,
        RoundingMode.CEILING
    );
BigDecimal bd2 = new BigDecimal(1234.5678)
    .divide(
        new BigDecimal(1.19),
        new MathContext(4, RoundingMode.CEILING)
    );

结果

bd1: 1037.4520
bd2: 1038

因为在MathContext(4, RoundingMode.CEILING) ,4是精度,但在.divide(new BigDecimal(1.19), 4, RoundingMode.CEILING); ,4为刻度。 您可以在此处看到“精度”和“比例”之间的区别

提到但没有直接解决的一个重要问题是“ 精度 ”和“ 小数 位数 ”之间的区别,以及在两种陈述中如何使用它们。 precision ”是数字中有效数字的总数。 scale ”是小数点右边的位数。

因此,如果您将第二个更改为

final BigDecimal bd2 = new BigDecimal(1234.5678)
        .divide(
                new BigDecimal(1.19),
                new MathContext(8, RoundingMode.CEILING)
        );

您有相同的结果:

1037.4520
1037.4520

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM