与 Double.NaN 相等

问题描述 投票:0回答:5

我有以下代码...

if (Price_Foreign != Double.NaN)
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}

哪个输出:

NaN USD

什么给予?

我使用 Double.NaN 来指示该值不存在,并且不应输出。

c# equality nan
5个回答
64
投票

也许您正在寻找

IsNaN
静态函数?

尝试这样的事情:

if (!Double.IsNaN(Price_Foreign))
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}

39
投票

IEEE 754 浮点标准规定,将 NaN 与 NaN 进行比较将始终返回 false。如果您必须这样做,请使用

Double.IsNaN()

但是,这不是完成您想做的事情的最佳方式。双精度数并不精确,您在这里使用它们来表示价格。我敢打赌,在某个时候,您也会想要比较价格以获得平等。这是行不通的,因为你不能依赖浮点相等

您应该真正考虑对这些值使用某种整数类型(支持相等比较),而不是尝试使用双精度数。双打用于解决科学问题;不是为了金融。


10
投票

Double.NaN
不等于任何东西,甚至不等于它本身。

请参阅 .NET Framework 类库文档中的 Double.NaN 字段

使用 IsNaN 判断某个值是否 不是一个数字。这是不可能的 判断一个值是否不是 通过与另一个数字进行比较 值等于 NaN。


8
投票

作为背景信息:

IsNaN()
方法的作用是
return v != v;


0
投票

如果你像我一样懒,可以使用以下扩展方法:

[MethodImpl( MethodImplOptions.AggressiveInlining )]
public static bool IsNaN( this System.Single v ) {
    return System.Single.IsNaN( v );
}

您需要另一个用于 System.Double。

© www.soinside.com 2019 - 2024. All rights reserved.