java中的等式运算符不能按预期工作

时间:2015-12-29 04:50:09

标签: java double

我写了一个程序,我认为应该打印出来,而不是把它给出错误。

  public class Test {
  public static void main(String[] args) {
    double i = 0.0 / 0.0;
    System.out.println(i - i == 0);
 }
}

有人可以解释一下为什么会出现这种情况。

5 个答案:

答案 0 :(得分:2)

这是因为i = 0.0 / 0.0等于NaN,因此NaN既不等于0也不等于(Nan)

答案 1 :(得分:1)

这是因为:

public class TestClass {
    public static void main(String[] args) {
    double i = 0.0 / 0.0;
    System.out.println(i-i); //NaN
    System.out.println(i - i == 0);//false
 }
}

NaN,代表不是数字,是表示未定义或不可表示值的数值数据类型值,尤其是在浮点计算中。

答案 2 :(得分:0)

double i = 0.0 / 0.0; // this assigned i=NaN
  

“NaN”代表“不是数字”。如果浮点运算有一些输入参数导致操作产生一些未定义的结果,则会产生“Nan”。例如,0.0除以0.0是算术上未定义的。取负数的平方根也是未定义的。

比较时

 System.out.println(i - i == 0); // it do Nan-Nan which is NaN

尝试比较

 NaN to 0 which is false

Java Floating Points

答案 3 :(得分:0)

double i = 0.0 / 0.0;

它将评估为NaN

i - i将是NaN - NaN又是NaN,即!= 0

答案 4 :(得分:0)

你在期待什么? 0.0 / 0.0indeterminate form,根据浮动格式NaN使用特殊值进行映射。

这是一个特殊的值,因为它具有破坏性,它通过每个连续的算术运算传播,这很好,因为它有助于诊断操作问题。

确实是0.0 / 0.0 = NaNNaN - whatever = NaN的情况(所以(0.0/0.0)-5.0也会产生NaN