如何在 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.0
或 3d
解释为双精度数。除法作为整数除法执行,结果转换为浮点数。要查看另一个有趣的其他效果 - 尝试 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 中,我除以零,这显然不会产生数字。
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.0
或 3d
解释为双精度数。除法作为整数除法执行,结果转换为浮点数。要查看另一个有趣的其他效果 - 尝试 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");
}
但我建议不要这样做,因为它具有很强的误导性 - 但我怀疑这不是你的意思