除以零的尝试捕获

2022-09-03 16:37:08

我的问题是关于在简单除以零的例子上进行尝试捕获块。你看到第一行尝试了吗?如果我将这两个变量中的任何一个转换为双精度值,程序将无法识别 catch 块。在我看来,无论我是否施放,都必须只执行捕获块。此代码上有什么问题?

public static void main(String[] args) {

    int pay=8,payda=0;  

    try {

        double result=pay/(double)payda; // if I cast any of the two variables, program does not recognize the catch block, why is it so?
        System.out.println(result);
        System.out.println("inside-try");

    } catch (Exception e) {

        System.out.println("division by zero exception");
        System.out.println("inside-catch");

    }
}

答案 1

除以零对浮点数有效。

  • 1/0 产生无穷大。
  • (-1)/0 产生 -无穷大。
  • 0/0 产生 NaN。

这些“数字”在IEEE 754中得到了适当的定义。

另一方面,整数除以零会抛出,因为不能将无穷大表示为 .int


答案 2

我建议验证:

if (divisor != 0) {
    // calculate
}

而不是捕获异常


推荐