我有代码来计算两个数字之间的百分比差异 - (oldNum - newNum)/oldNum * 100;
- 其中两个数字都是 double
s。我希望在 oldNum 为 0 的情况下必须添加某种检查/异常处理。但是,当我对 oldNum 和 newNum 的值都为 0.0 进行测试运行时,执行继续进行,就好像什么都没发生并且没有引发错误一样。使用 int
s 运行此代码肯定会导致算术除零异常。为什么Java在涉及到double
s时会忽略它?
最佳答案
Java 的 float
和 double
类型,与几乎所有其他语言(以及几乎所有硬件 FP 单元)一样,实现了 IEEE 754 float 学标准,要求除以零以返回特殊的“无穷大”值。抛出异常实际上会违反该标准。
整数运算(由 Java 和大多数其他语言和硬件实现为 two's complement 表示)是不同的,没有特殊的无穷大或 NaN 值,因此抛出异常是一种有用的行为。
关于java - 为什么Java除以0.0时不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2381544/