避免 BigDecimal 除法中的非终止小数扩展
Java 的 BigDecimal 类旨在促进高精度数学运算,但有时它会抛出“ArithmeticException:非终止十进制扩展;没有精确可表示的十进制结果”错误。当两个 BigDecimal 对象相除且商具有无限小数扩展时,会出现此异常。
异常原因
根据 BigDecimal 文档,当没有 MathContext 对象 (指定精度和舍入模式)被提供,算术运算被精确地执行。如果商具有非终止小数扩展且无法精确表示,则会引发异常。
示例
BigDecimal a = new BigDecimal("1.6"); BigDecimal b = new BigDecimal("9.2"); a.divide(b) // raises the ArithmeticException
修复
要解决此问题,您可以指定具有非零精度和舍入模式的 MathContext 对象。例如:
a.divide(b, 2, RoundingMode.HALF_UP)
这里,2 指定比例(小数位数),RoundingMode.HALF_UP 表示舍入方法。
其他信息
以上是如何避免 BigDecimal 除法中的'ArithmeticException:非终止十进制扩展”?的详细内容。更多信息请关注PHP中文网其他相关文章!