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);
我正在这样做:
(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);