为什么 Java 在除以 0.0 时不引发异常?

2022-08-31 14:16:28

我有代码来计算2个数字之间的百分比差异 - - 其中两个数字都是s。我预计必须添加某种检查/异常处理,以防oldNum为0。但是,当我对 oldNum 和 newNum 执行值为 0.0 的测试运行时,执行继续进行,就好像什么也没发生过一样,也没有抛出任何错误。使用 s 运行此代码肯定会导致算术除以零异常。为什么Java在涉及到s时忽略了它?(oldNum - newNum) / oldNum * 100;doubleintdouble


答案 1

Java和类型,就像几乎所有其他语言(以及几乎任何硬件FP单元)一样,实现了IEEE 754浮点数学标准,该标准要求除以零以返回特殊的“无穷大”值。引发异常实际上会违反该标准。floatdouble

整数算术(由Java和大多数其他语言和硬件实现为二进制补码表示)是不同的,并且没有特殊的无穷大或NaN值,因此抛出异常是一种有用的行为。


答案 2

从数学上讲,被零除的结果是未定义的,可以用浮点数/双精度(作为 - 而不是数字)来表示,但是,在任何基本意义上都不是错误的。NaN

由于整数必须包含特定的数值,因此在处理它们时必须抛出除以零的错误。