为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

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

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


查看完整回答
反对 回复 2019-09-02
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

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


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


查看完整回答
反对 回复 2019-09-02
?
墨色风雨

TA贡献1853条经验 获得超6个赞

除以零(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。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 2021 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信