在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?
答案 0 :(得分:7)
由于处理数字文字3和0的方式,您将收到意外的ArithmeticException。它们被解释为整数,尽管您将a
指定为浮点数。 Java会将3
解释为整数,将3f
解释为float,将3.0
或3d
解释为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");
}
}