【问题标题】:Not getting ArithmeticException in Java [duplicate]在 Java 中没有得到 ArithmeticException [重复]
【发布时间】:2020-03-20 10:02:48
【问题描述】:

我正在尝试在程序下方运行并期待Arithmetic Exception,因为我们是dividing double value by zero but getting Infinity as output

这是下面的程序。 But if we are using int instead of double then getting Arithmetic Exception

public static void main(String z[]) {
    Double a = 10.0;
    Double b = 0.0;
    System.out.println(a/b);
}

输出:Infinity

public static void main(String z[]) {
    int a = 10;
    int b = 0;
    System.out.println(a/b);
}

输出:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at (Test.java:94)

谁能解释一下为什么我们要为 Double 获得 Infinity 价值?

【问题讨论】:

  • @AndyTurner 这种行为可能也与浮点运算不精确有关吗?

标签: java


【解决方案1】:

参考language spec

如果整数除法中除数的值为 0,则引发 ArithmeticException。

...

浮点除法的结果由 IEEE 754 算术规则确定:

  • 非零有限值除以零会产生有符号无穷大。

浮点除法可以有一个非异常的结果,因为有一个特殊的值来表示它。整数除法没有这个特殊值,所以返回任何整数结果都是不正确的;唯一的选择是抛出异常。

【讨论】:

    【解决方案2】:

    在 IEEE 754 浮点运算中,将一个值除以 0(分别为 0.0)是明确定义的,并且会产生一个“无限”值,无论是正数还是负数,具体取决于所涉及的值。

    在整数域中,没有定义这样的东西,因此你得到一个ArithmeticException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2021-07-10
      • 2021-12-21
      • 2021-03-28
      相关资源
      最近更新 更多