问题描述
当
MathContext
对象的精度设置为 0(例如)时,算术运算是精确的,就像不带对象MathContext.UNLIMITED
的算术方法一样。MathContext
(这是 5 之前的版本中唯一支持的行为。)作为计算精确结果的必然结果,
MathContext
不使用精度设置为 0 的对象的舍入模式设置,因此不相关。在除法的情况下,精确商可以有一个无限长的小数展开;例如,1 除以 3。如果商具有非终止的十进制扩展并且指定操作返回精确结果,
ArithmeticException
则抛出 an。否则,将返回除法的确切结果,就像其他操作一样。
:
a.divide(b, 2, RoundingMode.HALF_UP)
其中 2 是比例,RoundingMode.HALF_UP 是舍入模式
解决方法
为什么以下代码会引发如下所示的异常?
BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b) // results in the following exception.
例外:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.