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