微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ArithmeticException:“非终止十进制扩展;没有精确可表示的十进制结果”

如何解决ArithmeticException:“非终止十进制扩展;没有精确可表示的十进制结果”

来自Java 11BigDecimal文档

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 举报,一经查实,本站将立刻删除。