java - 如何在Java中显示NaN?

标签 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 的处理方式,您收到了意外的 ArithmeticException。尽管您将 a 指定为 float ,但它们仍被解释为整数。 Java 将 3 解释为整数,将 3f 解释为浮点型,将 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");
}

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

关于java - 如何在Java中显示NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27843501/

相关文章:

java - 未找到符号和包

java - ConcurrentHashMap:避免使用 "putIfAbsent"创建额外的对象?

javascript - 从特定来源缩放 Canvas

c - 当链接源中的函数定义与 header 中的函数原型(prototype)不同时,gcc 不会发出警告

java - 在 WSDL 中导入命名空间导致 JAXP09020006 : The argument 'systemId' can not be null

java - 将服务添加到具有困难包结构的 Android list (LibGDX)/在 Android list 中引用包

performance - 下秩矩阵的计算

javascript - 嵌套函数可以具有在范围之外取值的未定义参数吗?

r - mean(x, na.rm = TRUE) 的错误结果

Javascript NaN 数字不是函数