BigDecimal setScale和round

这两个电话有什么区别? (有没有?)

// 1. new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP)); // 2. new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP); 

其中一个重要的观点就是“精确”“规模”之间的区别,以及它们在这两个陈述中的使用方式。 “精度”是一个数字中有效位数的总数。 “scale”是小数点右侧的位数。

MathContext构造函数只接受精度和RoundingMode作为参数,因此从不在第一个语句中指定scale。

setScale()显然接受scale作为参数,以及RoundingMode,但是在第二个语句中绝不会指定精度。

如果将小数点向右移一位,则差异将变得清晰:

 // 1. new BigDecimal("35.3456").round(new MathContext(4, RoundingMode.HALF_UP)); //result = 35.35 // 2. new BigDecimal("35.3456").setScale(4, RoundingMode.HALF_UP); // result = 35.3456 

确实有一个很大的差别,你应该记住。 setScale确实设置了你的数字的比例,而round则是将你的数字四舍五入到指定的数字,但是它从jdk中提到的“从精确结果的最左边的数字开始”。 所以关于你的样品结果是一样的,但是试试0.0034。 以下是我在博客上的说明:

http://araklefeistel.blogspot.com/2011/06/javamathbigdecimal-difference-between.html