C# 与Double.NaN相等

C# 与Double.NaN相等,c#,equality,nan,C#,Equality,Nan,我有以下代码 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)) { outp

我有以下代码

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));
}
表示将NaN与NaN进行比较将始终返回false。如果必须这样做,请使用
Double.IsNaN()

但是,这不是做你想做的事情的最佳方式。双倍不是精确的,你用它们来表示价格。我打赌,在某个时候,你也会想要比较价格是否平等。那是行不通的,因为


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

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

请参见.NET Framework类库文档中的:

用于确定是否存在一个值 这不是一个数字。这是不可能的 确定某个值是否不是 通过将其与另一个进行比较来进行编号 值等于NaN


作为背景信息:
IsNaN()
方法所做的是
返回v!=五,

参见对原始问题的评论。--多年前,我一直在使用现有的数据库。除非您使用
.Equals
!不,看到了吗