36

我有以下代码...

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

哪个输出:

NaN USD

是什么赋予了?

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

4

4 回答 4

61

也许您正在寻找IsNaN静态功能?

尝试这样的事情:

if (!Double.IsNaN(Price_Foreign))
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
于 2009-02-17T19:05:30.357 回答
34

IEEE 754 浮点标准规定将 NaN 与 NaN 进行比较将始终返回false。如果您必须这样做,请使用Double.IsNaN().

但是,这不是做你想做的事情的最好方法。双打并不精确,您在这里使用它们来表示价格。我敢打赌,在某个时候,你也会想比较价格是否平等。那是行不通的,因为你不能依赖浮点相等

您应该真正考虑为这些值使用一些整数类型(支持相等比较),而不是尝试使用双精度数。双打用于科学问题;不是为了金融。

于 2009-02-17T19:05:40.200 回答
9

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

请参阅.NET Framework 类库文档中的Double.NaN 字段:

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

于 2009-02-17T19:06:09.420 回答
8

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

于 2010-05-24T14:47:31.800 回答