为什么以下代码会引发如下所示的异常?
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.
从Java 11 BigDecimal文档:
当为MathContext
对象提供的精度设置为0(例如MathContext.UNLIMITED)时,算术运算是精确的,不带MathContext
对象的算术方法也是如此。(这是5之前的版本中唯一支持的行为。)
作为计算精确结果的必然结果,MathContext
不使用精度设置为0 的对象的舍入模式设置,因此不相关。在除法的情况下,精确的商可以具有无限长的十进制扩展;例如1除以3。
如果商具有不间断的十进制扩展数,并且指定了该操作以返回精确的结果,ArithmeticException
则将引发an 。否则,将返回除法的精确结果,就像其他操作一样。
要解决此问题,你需要执行以下操作:
a.divide(b, 2, RoundingMode.HALF_UP)
其中2是小数位数,RoundingMode.HALF_UP是四舍五入模式
为什么下面的代码会引发如下所示的异常? 例外情况:
我的java代码在HP-UX hpdev B.11.23 U ia64上运行,有时会产生以下异常:java。算术异常:非终止十进制扩展;没有可精确表示的十进制结果。 导致它的代码: 记录是一个简单的sql查询中列值的集合。p_change来自Oracle数据库中的表,其中列为NUMBER(10,2)。 我明白为什么会这样。频率是随机的,有时会用相同的数据进行细分。我只是想知道这是否与硬件有关。
代码: 当我输入十进制值时,它抛出一个异常:线程“主”中的异常java.lang.算术异常:非终止十进制扩展;没有确切的可表示的十进制结果。
我参考了这一点,并对值进行了四舍五入,然后我也得到了上述错误。请查找下面提到的代码。提前感谢:
我以前用过大小数,但不太经常,今天早上我正在做一些事情,我一直得到以下例外: 我试图设置规模,并使用四舍五入来消除这样的问题: 然而,我一直得到同样的例外。有人能告诉我哪里出了错吗?
以下是的内容: