我有以下代码......
if (Price_Foreign != Double.NaN)
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
哪个输出:
NaN USD
是什么给出了?
我正在使用Double.NaN来表示该值不存在,并且不应输出。
答案 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。