2

我的 java 代码在 HP-UX hpdev B.11.23 U ia64 上运行,有时它会产生以下异常: java.lang.ArithmeticException: Non-terminating decimal expansion; 没有精确可表示的十进制结果。

导致它的代码:

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

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

我理解为什么会发生这种情况。频率是随机的,有时它会用相同的数据很好地划分。我只是想知道这是否与硬件有关。

4

1 回答 1

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_Change 替换为 pi

该问题可能与您未进入舍入模式有关。尝试使用

p_Change.divide(new BigDecimal(100), BigDecimal.ROUND_HALF_UP); 
于 2013-07-23T19:41:51.093 回答