与Double.NaN平等

Chr*_*ore 31 c# equality nan

我有以下代码......

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

哪个输出:

NaN USD
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?

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

And*_*are 56

也许您正在寻找IsNaN静态功能?

尝试这样的事情:

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


Tod*_*lin 30

IEEE 754浮点标准与NaN的比较NaN的状态将始终返回false.如果必须这样做,请使用Double.isNaN().

但是,这不是做你想要做的事情的最佳方式.双打不准确,你在这里使用它们代表价格.我打赌,在某些时候,你也想要比较平等价格.这不会起作用,因为你不能依赖浮点相等.

您应该真正考虑使用某些整数类型来表示这些值(支持相等比较),而不是尝试使用双精度数.双打用于科学问题; 不是为了财务.


Mar*_*aux 9

作为背景信息:该IsNaN()方法的作用是什么return v != v;

  • 否。参见[参考来源](https://referencesource.microsoft.com/#mscorlib/system/double.cs,b3843db5f359a0fd) (2认同)

Gra*_*ner 8

Double.NaN 不等于任何东西,甚至不是自己.

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

使用IsNaN确定值是否不是数字.通过将值与另一个等于NaN的值进行比较,无法确定值是否为数字.

  • 除非你使用`.Equals`! (3认同)