java - 即使除以 100 也会发生 "Non-terminating decimal expansion; no exact representable decimal result"

标签 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 查询的列值的简单集合。p_change 来自 Oracle 数据库中的表,其中列为 NUMBER(10,2)。

我明白为什么会这样。频率是随机的,有时它会很好地划分相同的数据。我只是想知道这是否与硬件有关。

最佳答案

您可以对 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); 

关于java - 即使除以 100 也会发生 "Non-terminating decimal expansion; no exact representable decimal result",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17819058/

相关文章:

java - 内部开关无法接受用户输入

javascript - 如何在 Android 上的 WebView 中允许 HTTP 连接(不是 HTTPS)?

java - Spring Restful中传输BigDecimal类型

java - 大十进制舍入

Java异常处理理解问题

java - JTextField 中的符号验证

java - 使用 Spring IoC 配置 SSL ReSTLet 服务器?

ruby-on-rails-4 - Rails NoMethodError : undefined method new for BigDecimal:Class

java - 大十进制下溢

java - 为什么用浮点(或 double )数字除以零不会抛出 java.lang.ArithmeticException :/by zero in Java