BigDecimal,setScale 问题

BigDecimal, issue with setScale

我正在这样做:

(obj.getValue().divide(weight)).setScale(3, RoundingMode.HALF_DOWN)

我收到了这个错误:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

我需要把 setScale 放在哪里?

谢谢

异常来自 divide 方法,因此您无法修复它 执行后更改某些内容。您实际上应该将 MathContext 作为第二个参数传递给 divide 方法本身:

(obj.getValue().divide(weight, new MathContext(3, RoundingMode.HALF_DOWN)));

这样你明确地说你想用 HALF_DOWN 舍入模式除以保留 3 位数字。

或者你还有BigDecimal的另一种public方法:

public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

应用于您的示例:

obj.getValue().divide(weight, 3, RoundingMode.HALF_DOWN);