如何解决ArithmeticException:“非终止十进制扩展;没有精确可表示的十进制结果”
当
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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。