我有以下代码...
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类型并不精确,并且您在此处使用它们来表示价格。我打赌您最终会想要比较价格是否相等。这不起作用,因为您不能依赖浮点数的相等性。
您应该真正考虑使用一些整数类型来表示这些值(支持相等性比较),而不是尝试使用Double类型。Double类型适用于科学问题,而不适用于财务问题。
Double.NaN
不等于任何东西,甚至不等于它自己。
请参见 .NET Framework 类库文档中的 Double.NaN 字段:
使用 IsNaN 来确定一个值是否为非数字。无法通过将其与等于 NaN 的另一个值进行比较来确定一个值是否为非数字。
.Equals
方法! - NetMageIsNaN()
方法的作用是返回 v != v;
。[MethodImpl( MethodImplOptions.AggressiveInlining )]
public static bool IsNaN( this System.Single v ) {
return System.Single.IsNaN( v );
}
xxx is Double.NaN
) 的测试是否正确? - CodingNinja