为什么将整数除以零并将其强制转换为浮点数会产生无穷大?

Moh*_*sal 3 java floating-point divide-by-zero

我已经在这个主题上搜索了不同的问题,但没有明确的想法.检查此代码:

class Test{
    public static void main(String[] s){
        int a=5;
        float b=(float)a/0;
        System.out.print(b);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是Infinity.但我没有得到的东西ainta/0必须抛出异常.那怎么能显示输出Infinity呢?

tem*_*def 8

原因是

(float)a/0;
Run Code Online (Sandbox Code Playgroud)

被解释为

((float)a)/0;
Run Code Online (Sandbox Code Playgroud)

并不是

(float)(a/0);
Run Code Online (Sandbox Code Playgroud)

所以你实际上是在进行除法之前转换a为a float,而不是进行整数除法然后转换结果.

希望这可以帮助!

  • @fireshadow:不,结果就是"无限". (6认同)
  • @Mohammad Faisal-这是多年前做浮点运算的计算机硬件设计者的任意决定.在这种情况下,他们可能很容易选择导致错误,但他们选择不这样做. (3认同)