我有以下代码...
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 浮点标准规定将 NaN 与 NaN 进行比较将始终返回false。如果您必须这样做,请使用Double.IsNaN()
.
但是,这不是做你想做的事情的最好方法。双打并不精确,您在这里使用它们来表示价格。我敢打赌,在某个时候,你也会想比较价格是否平等。那是行不通的,因为你不能依赖浮点相等。
您应该真正考虑为这些值使用一些整数类型(支持相等比较),而不是尝试使用双精度数。双打用于科学问题;不是为了金融。
Double.NaN
不等于任何东西,甚至不等于它自己。
请参阅.NET Framework 类库文档中的Double.NaN 字段:
使用IsNaN确定值是否不是数字。无法通过将一个值与另一个等于 NaN 的值进行比较来确定一个值是否不是数字。
作为背景信息:该IsNaN()
方法的作用是return v != v;