ArithmeticException - 没有可确切表示的小数结果
@本文章运行于Java 8下
ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
- 在什么情况下抛出该异常
BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b)
2.引发该异常的原因
1.BigDecimal 是一个由用户完全控制舍入行为的类,如果用户没有明确知道舍入模式,则抛出异常。
2.如果把MathContext 精度设置为0,则不会出现精度问题,因为该设置将不会使用精度计算,也就是不保留小数位。
3.Java 5 之前只支持这个行为,但是如果你指定了舍入模式,你就必须指定你期待的一个精度。比如,当出现无限小数的时候,将会抛出异常,所以,你必须指定你需要的精度以及舍入模式。
3.如何解决该异常
// 指定保留2位小数,使用HALF_UP 的舍入模式
a.divide(b, 2, RoundingMode.HALF_UP)