如何在 Java 中显示 NaN?

How to display NaN in Java?

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

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

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

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

有什么方法(除了if(denominator==0))可以显示 NaN 吗?

怎么样:

public class tempmain {

public static void main(String args[])
{
    try {
       float a=3/0;
       System.out.println(a);
    } catch (ArithmeticException x) {
       System.out.println("Not Evaluable");
    }
}

}

还有这个选项:

{
...
//if (a != a) {        // these two are equivalent
if (Float.isNaN(a)) {
  System.out.println("NaN");
  }
}

参见:Float.NaN == Float.NaN

首先,浮点数除以零不会得到 NaN,它会得到无穷大。其次,您除的是整数,而不是浮点数。

float a = 3.0f/0.0f;
System.out.println(a);  // Prints Infinity

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

摆脱异常 - 改变

float a = 3/0;

对于

float a = 3f/0;

正如其他人在评论和答案中指出的那样,如果您随后打印 a,您将看到 Infinity 而不是 NaN。如果你真的想在这种情况下打印 NaN ,你可以测试 a 是否为无限,即

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

但我建议不要这样做,因为它具有很强的误导性 - 但我怀疑这不是你的意思