BigDecimal和MathContext的不一致行为

时间:2014-12-18 23:33:50

标签: java bigdecimal mathcontext

我正在看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时,似乎对比例的处理方式不同。或者我不明白何时使用哪个。

1 个答案:

答案 0 :(得分:1)

divide BigDecimal方法允许您指定结果的比例,松散地说是小数位数。 scale = 3表示数字将以3位小数表示。负标度表示整数末尾的无效零的数量 - 例如,要舍入到最接近的1000,您可以指定scale = -3

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

但是MathContext是不同的。它允许您指定 precision - 即有效位数。这与 scale 不同。

MathContext mc = new MathContext(3,RoundingMode.HALF_UP);
four.divide(three, mc); // precision = 3, so round to 3 significant figures