Java BigDecimal和MathContext的行为不一致
我看到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
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