3

我看到 BigDecimal 的一些奇怪行为当我使用 mathContext 进行除法时,输出与我通过直接提供比例和舍入模式进行除法时不同 这是我认为应该提供相同输出的示例

public static void main(String...args){
    MathContext mc = new MathContext(3,RoundingMode.HALF_UP);
    BigDecimal four = new BigDecimal(4);
    BigDecimal three = new BigDecimal(3);
    System.out.println(four.divide(three,3,RoundingMode.HALF_UP));
    System.out.println(four.divide(three,mc));
}

输出:

1.333
1.33

使用 MathContext 时,似乎对比例的处理方式有所不同。或者我不明白什么时候使用哪个。

4

1 回答 1

5

divide方法BigDecimal可以让您指定结果的比例,松散地说是小数位数。 scale = 3表示一个数字将以 3 位小数表示。负比例表示整数末尾不重要的零的数量 - 例如,要四舍五入到最接近的 1000,您可以指定scale = -3.

four.divide(three,3,RoundingMode.HALF_UP);  // scale = 3, so round to 3 decimal places

但是aMathContext不一样。它允许您指定精度- 即有效位数。这与规模不同。

MathContext mc = new MathContext(3,RoundingMode.HALF_UP);
four.divide(three, mc); // precision = 3, so round to 3 significant figures
于 2014-12-18T23:36:35.000 回答