这两个调用有什么区别?(有没有?)
// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);
这两个调用有什么区别?(有没有?)
// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);
提到但未直接解决的一个重要点是“精度”和“比例”之间的区别以及它们在两个语句中的使用方式。 “精度”是数字中有效数字的总数。 “刻度”是小数点右侧的位数。
MathContext 构造函数只接受精度和 RoundingMode 作为参数,因此从不在第一条语句中指定比例。
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