直接调用 bigdecimal 的 scale() 方法可获取小数位数,返回值为实际存储的标度(含负数),与数值显示无关;scale 与 precision 不同,前者是小数位数,后者是有效数字总位数;修改需用 setscale() 创建新对象。

直接调用 BigDecimal 实例的 scale() 方法即可获取当前数值的标度(即小数位数)。
scale() 返回的是实际定义的小数位数,不是显示格式
注意:scale 表示的是该 BigDecimal 对象内部存储的精度信息,即“小数点后保留几位”,它与数值是否为整数、是否末尾有零有关。例如:
-
new BigDecimal("123.45").scale()→ 返回 2 -
new BigDecimal("123.000").scale()→ 返回 3(即使数值等于 123,scale 仍为 3) -
new BigDecimal("123").scale()→ 返回 0 -
new BigDecimal("0.00").scale()→ 返回 2
scale 可能为负数:表示数值乘以 10 的幂
当 scale 为负时,说明该 BigDecimal 表示的是一个“放大”后的整数。比如:
-
new BigDecimal("12345").scale(-2)等价于12345 × 10² = 1234500 - 可通过
unscaledValue()+scale()还原原始含义
不要混淆 scale 和精度(precision)
scale 是小数位数(含负值),而 precision 是所有有效数字的总位数(不含符号,恒为正):
-
new BigDecimal("123.45").precision()→ 返回 5 -
new BigDecimal("123.45").scale()→ 返回 2 -
new BigDecimal("0.00123").precision()→ 返回 3(有效数字是 123) -
new BigDecimal("0.00123").scale()→ 返回 5
设置或调整 scale 要用 setScale(),不能直接修改
scale() 是只读属性。如需改变小数位数,必须调用 setScale(int newScale, RoundingMode mode) 创建新对象:
-
bd.setScale(2, RoundingMode.HALF_UP)→ 四舍五入保留两位小数 - 原对象不变,返回的是新
BigDecimal - 若 newScale 小于当前 scale,必须指定舍入模式,否则抛
ArithmeticException
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











