这两个调用有什么区别? (有没有?)

// 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 作为参数,因此在第一条语句中从未指定比例。
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

关于java - BigDecimal setScale 和 round,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3843440/

10-13 07:06