【发布时间】:2010-10-08 04:19:30
【问题描述】:
我有以下代码...
if (Price_Foreign != Double.NaN)
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
哪些输出:
NaN USD
什么给了?
我用 Double.NaN 表示该值不存在,不应该输出。
【问题讨论】:
我有以下代码...
if (Price_Foreign != Double.NaN)
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
哪些输出:
NaN USD
什么给了?
我用 Double.NaN 表示该值不存在,不应该输出。
【问题讨论】:
也许您正在寻找IsNaN 静态函数?
试试这样的:
if (!Double.IsNaN(Price_Foreign))
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
【讨论】:
IEEE 754 floating point standard 声明将 NaN 与 NaN 进行比较将总是返回 false。如果必须这样做,请使用Double.IsNaN()。
但是,这不是做您想做的事情的最佳方式。双打并不精确,您在这里使用它们来表示价格。我敢打赌,在某个时候,你也会想比较价格是否平等。那是行不通的,因为you can't rely on floating point equality。
您应该真正考虑为这些值使用某种整数类型(支持相等比较),而不是尝试使用双精度数。双打用于科学问题;不是为了财务。
【讨论】:
Double.NaN 不等于任何东西,甚至不等于它自己。
请参阅 .NET Framework 类库文档中的 Double.NaN Field:
使用IsNaN判断一个值是否 不是一个数字。这是不可能的 判断一个值是否不是 通过将其与另一个进行比较来获得数字 值等于 NaN。
【讨论】:
.Equals!
作为背景信息:IsNaN() 方法所做的是return v != v;
【讨论】: