如何在Java中显示NaN?

时间:2015-01-08 15:21:07

标签: java math nan arithmetic-expressions

在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?

3 个答案:

答案 0 :(得分:7)

由于处理数字文字3和0的方式,您将收到意外的ArithmeticException。它们被解释为整数,尽管您将a指定为浮点数。 Java会将3解释为整数,将3f解释为float,将3.03d解释为double。除法作为整数除法执行,结果转换为浮点数。要看到另一个有趣的其他效果 - 尝试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");
}

但是我建议反对它作为极具误导性的 - 但我怀疑这不是你的意思

答案 1 :(得分:4)

首先,在浮点数中除以零不会给出NaN,它给出了无穷大。其次,你要划分整数,而不是浮点数。

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

答案 2 :(得分:2)

怎么样:

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