“非终止十进制扩展;没有精确可表示的十进制结果”即使除以100也会发生

时间:2013-07-23 19:13:20

标签: java bigdecimal arithmeticexception

我的java代码在HP-UX hpdev B.11.23 U ia64上运行,有时会产生以下异常: java.lang.ArithmeticException:非终止十进制扩展;没有确切的可表示的十进制结果。

导致它的代码:

BigDecimal p_Change = (BigDecimal)record.get("P_CHNG");
p_Change.divide(new BigDecimal(100));

记录很简单sql query.p_change中的列值集合来自Oracle数据库中的表,其中列为NUMBER(10,2)。

我明白为什么会发生这种情况。频率是随机的,有时会用相同的数据进行细分。我只是想知道这是否与硬件有关。

1 个答案:

答案 0 :(得分:0)

你能为p_Change的值做一个system.out吗?

BigDecimal p_Change = new BigDecimal(Math.PI);
System.out.println(p_Change.divide(new BigDecimal(100)));

// yields this 0.03141592653589793115997963468544185161590576171875

它与您的代码完全相同,仅用p

代替p_Change

这个问题可能不得不处理你没有进入舍入模式。尝试使用

p_Change.divide(new BigDecimal(100), BigDecimal.ROUND_HALF_UP);