与Double.NaN平等

时间:2009-02-17 19:01:50

标签: c# equality nan

我有以下代码......

if (Price_Foreign != Double.NaN)
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}

哪个输出:

NaN USD

是什么给出了?

我正在使用Double.NaN来表示该值不存在,并且不应输出。

4 个答案:

答案 0 :(得分:55)

也许您正在寻找IsNaN静态函数?

尝试这样的事情:

if (!Double.IsNaN(Price_Foreign))
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}

答案 1 :(得分:29)

比较NaN和NaN的IEEE 754 floating point standard状态将始终返回false。如果必须这样做,请使用Double.isNaN()。

但是,这不是做你想做的事情的最佳方式。双打不准确,你在这里使用它们代表价格。我打赌,在某些时候,你也想要比较平等价格。这不会起作用,因为you can't rely on floating point equality

您应该考虑使用某些整数类型来表示这些值(支持相等比较),而不是尝试使用双精度数。双打用于科学问题;不是为了财务。

答案 2 :(得分:9)

作为背景信息:IsNaN()方法的作用是return v != v;

答案 3 :(得分:8)

Double.NaN不等于任何东西,甚至不是自己。

请参阅.NET Framework类库文档中的Double.NaN Field

  

使用IsNaN确定是否有值   不是一个数字。这是不可能的   确定值是否不是a   将数字与另一数字进行比较   值等于NaN。