首页 文章

BigDecimal和MathContext

提问于
浏览
1

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

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)
    );

Result

bd1: 1037.4520
bd2: 1038

1 回答

  • 4

    因为在 MathContext(4, RoundingMode.CEILING) 中,4是精度,但在 .divide(new BigDecimal(1.19), 4, RoundingMode.CEILING); 中,4是比例 . 你可以看到"precision"和"scale" here之间的区别

    提到但未直接解决的一个重要问题是“精确”和“规模”之间的区别以及它们在两个陈述中的使用方式 . “precision”是数字中有效数字的总数 . “scale”是小数点右边的位数 .

    所以,如果你改变第二个

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

    你有相同的结果:

    1037.4520
    1037.4520
    

相关问题