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

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



临摹微笑
浏览 2016回答 3
3回答

HUX布斯

从数学上讲,除以零的结果是未定义的,可以用浮点数/双精度表示(NaN不是数字),但在任何基本意义上都不是错误的。由于整数必须包含特定的数值,因此在处理它们时必须将除以零的错误抛出。

沧海一幻觉

Java float和double类型,就像其他任何语言(以及几乎任何硬件FP单元)一样,实现了浮点数学的IEEE 754标准,它要求除以零以返回特殊的“无穷大”值。抛出异常实际上会违反该标准。整数算术(由Java和大多数其他语言和硬件实现为二进制补码表示)是不同的,没有特殊的无穷大或NaN值,因此抛出异常是一种有用的行为。

墨色风雨

除以零(0或0.00)时如果将double除以0,JVM将显示Infinity。public static void main(String [] args){ double a=10.00; System.out.println(a/0); }安慰: Infinity如果将int除以0,则JVM将抛出算术异常。public static void main(String [] args){    int a=10;    System.out.println(a/0);}安慰: Exception in thread "main" java.lang.ArithmeticException: / by zero但是如果我们将int除以0.0,那么JVM将显示Infinity:public static void main(String [] args){    int a=10;    System.out.println(a/0.0);}安慰: Infinity这是因为JVM会自动将cast int类型化为double,因此我们得到无穷大而不是ArithmeticException。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java