正如Java语言规范中所写的那样,如果其中一个或两个操作数为NaN,则数值比较运算符<;、<;=、>;和>;=返回FALSE. 所以我在比较两个男的. 为什么当我比较两个NaN时,它在控制台上打印为真?
double f = 3/0.0d;
double h = 2/0.0d;
System.out.println((f>=h));
F和h都是NaN,当我比较它们时,我希望输出FALSE,但我得到了TRUE作为我的输出.
正如Java语言规范中所写的那样,如果其中一个或两个操作数为NaN,则数值比较运算符<;、<;=、>;和>;=返回FALSE. 所以我在比较两个男的. 为什么当我比较两个NaN时,它在控制台上打印为真?
double f = 3/0.0d;
double h = 2/0.0d;
System.out.println((f>=h));
F和h都是NaN,当我比较它们时,我希望输出FALSE,但我得到了TRUE作为我的输出.
2.0/0不会生成非数:
System.out.println(2.0/0.0);
> Infinity
DOUBLE有3个‘非数字’值:
根据规范,正无穷大等于正无穷大,负无限大等于负无穷大.只有南不能自给自足.
我们可以找到南:
double nan = 0.0 / 0.0;
System.out.println(nan);
System.out.println(nan == nan);
> 非数
> false
如果你在某个地方确实需要非数(例如,你想退货),最容易理解的方法是Double.非数
.上面的例子简单地展示了如何自然地从计算中获得非数值--当零除以零时是最常见的方法.其他几种方式:
double posInf = Double.POSITIVE_INFINITY;
double negInf = Double.NEGATIVE_INFINITY;
System.out.println(posInf - posInf); // 非数
System.out.println(posInf - negInf); // positive infinity
System.out.println(posInf / posInf); // 非数