如何在Java中显示NaN?

Pra*_*kar 0 java math arithmetic-expressions nan

在Java中,我除以零,这显然不会产生数字.

public class tempmain {
    public static void main(String args[])
    {
        float a=3/0;
        System.out.println(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为"NaN",但它显示以下错误:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at tempmain.main(tempmain.java:6)
Run Code Online (Sandbox Code Playgroud)

是否有任何方式(除此之外if(denominator==0))可以显示NaN?

J R*_*ape 7

由于处理数字文字3和0的方式,您将收到意外的ArithmeticException.它们被解释为整数,尽管您指定a为浮点数.Java将解释3为整数,3f浮点数3.03d双精度数.除法作为整数除法执行,结果转换为浮点数.要看到另一个有趣的其他效果 - 尝试float a = 1/3和检查a- 你会发现它是0.0,而不是0.3333 ....正如你所料.

摆脱异常 - 改变

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

对于

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

正如其他人在评论和答案中所指出的,如果你再打印a,你会看到Infinity而不是NaN.如果你真的想在这种情况下打印NaN,你可以测试a是无限的

if (Float.isInfinite(a)) {
     System.out.println("I want to print Infinity as NaN");
}
Run Code Online (Sandbox Code Playgroud)

但我建议反对它具有高度误导性 - 但我怀疑这不是你的意思