Java BigDecimal和MathContext的行为不一致

Java BigDecimal和MathContext的行为不一致,java,bigdecimal,mathcontext,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 = n

我看到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时,比例的处理方式似乎有所不同。或者我不知道什么时候该用哪个。

BigDecimal的除法可以指定结果的小数位数,粗略地说就是小数位数。比例=3表示数字将用3位小数表示。负刻度表示整数末尾不重要的零的数量-例如,要四舍五入到最接近的1000,可以指定刻度=-3

但数学背景是不同的。它允许您指定精度,即有效位数。这与规模不同


有这方面的文件吗?它不在BigDecimalnevermind的javadocs中,我只是查看了mathContext的文档,它说“精度”
four.divide(three,3,RoundingMode.HALF_UP);  // scale = 3, so round to 3 decimal places
MathContext mc = new MathContext(3,RoundingMode.HALF_UP);
four.divide(three, mc); // precision = 3, so round to 3 significant figures