在 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 的处理方式,您收到了意外的 ArithmeticException。尽管您将 a
指定为 float ,但它们仍被解释为整数。 Java 将 3
解释为整数,将 3f
解释为浮点型,将 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");
}
但我建议不要这样做,因为它具有高度误导性 - 但我怀疑这不是你的意思
关于java - 如何在Java中显示NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27843501/