日期:2014-05-18  浏览次数:20822 次

一道神也做不对的C#读程序题!
double i = -100;
  i = Math.Sqrt(i);
  if (i == double.NaN)
  {
  Console.Write("输出错误!");
  }
  else
  {
  Console.Write(i.ToString());
  }
那个仁兄能够不用运行程序就知道输出结果。

------解决方案--------------------
if (i == double.NaN) 
上面的判断语句有错误,改成下面的
if (double.IsNaN(i))
------解决方案--------------------
可以简化一下测试:
C# code
double i = double.NaN;
Console.WriteLine(i == double.NaN); // False;
Console.WriteLine(double.Equals(i, double.NaN)); // True;

------解决方案--------------------
C# code
Console.WriteLine("{0},{1}",i.GetHashCode(),double.NaN.GetHashCode()); 
            Console.WriteLine(Equals(i, double.NaN));

------解决方案--------------------
http://www.msdn.net/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemdoubleclassnantopic.asp
NET Framework 类库

Double.NaN 字段
表示不是数字 (NaN) 的值。此字段为常数。

[Visual Basic]
Public Const NaN As Double
[C#]
public const double NaN;
[C++]
public: const double NaN;
[JScript]
public var NaN : double;
备注
此常数的值是零被零除所得到的结果。

当运算结果未定义时返回此常数。

使用 IsNaN 确定某个值是否不是数字。不可能通过将某个值与另一个等于 NaN 的值进行比较来确定该值是否不是数字。