java - 为什么Java除以0.0时不抛出异常?

标签 java types integer double divide-by-zero

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

最佳答案

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

整数运算(由 Java 和大多数其他语言和硬件实现为 two's complement 表示)是不同的,没有特殊的无穷大或 NaN 值,因此抛出异常是一种有用的行为。

关于java - 为什么Java除以0.0时不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2381544/

相关文章:

swift - Decodable 类型的数组不可解码

java - JDK 1.6及以上版本Integer类的缓存机制改变有什么好处?

javascript - 整数被错误地解析为字符串

java - 何时使用包装类和原始类型

带有自定义 ArrayList 的 java.util.ConcurrentModificationException

java - 为什么需要在OSGi Security中授予java安全管理器所有权限

javascript - 如何在 TypeScript 中链接函数参数类型?

TypeScript - [string] 与 string[]

python - 从字符串和整数的元组中,获取元组内最接近给定值的数字

java - 只打印数组中 3 的倍数