BigDecimal和MathContext

时间:2018-12-10 10:44:05

标签: java

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

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

1 个答案:

答案 0 :(得分:4)

因为在MathContext(4, RoundingMode.CEILING)中4是精度,但是在.divide(new BigDecimal(1.19), 4, RoundingMode.CEILING);中4是小数位。您会看到“精度”和“比例” here

之间的区别
  

一个被提到但没有直接解决的重要问题是   “ 精度”和“ 比例”之间的区别以及使用方式   在两个语句中。 “ 精度”是有效的总数   数字中的数字。 “ 比例”是数字右侧的位数   小数点。

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

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

您有相同的结果:

1037.4520
1037.4520