我有以下代码...
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;
如果你像我一样懒,可以使用以下扩展方法:
[MethodImpl( MethodImplOptions.AggressiveInlining )]
public static bool IsNaN( this System.Single v ) {
return System.Single.IsNaN( v );
}
您需要另一个用于 System.Double。