与 Double.NaN 相等

Posted

技术标签:

【中文标题】与 Double.NaN 相等【英文标题】:Equality with Double.NaN 【发布时间】:2010-10-08 04:19:30 【问题描述】:

我有以下代码...

if (Price_Foreign != Double.NaN)

   output.Append(spacer);
   output.Append(String.Format("0,-10:C USD",Price_Foreign));

哪些输出:

NaN USD

什么给了?

我用 Double.NaN 表示该值不存在,不应该输出。

【问题讨论】:

【参考方案1】:

也许您正在寻找IsNaN 静态函数?

试试这样的:

if (!Double.IsNaN(Price_Foreign))

   output.Append(spacer);
   output.Append(String.Format("0,-10:C USD",Price_Foreign));

【讨论】:

【参考方案2】:

IEEE 754 floating point standard 声明将 NaN 与 NaN 进行比较将总是返回 false。如果必须这样做,请使用Double.IsNaN()

但是,这不是做您想做的事情的最佳方式。双打并不精确,您在这里使用它们来表示价格。我敢打赌,在某个时候,你也会想比较价格是否平等。那是行不通的,因为you can't rely on floating point equality。

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

【讨论】:

查看对原始问题的评论。 -- 我被多年前的现有数据库困住了。【参考方案3】:

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

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

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

【讨论】:

除非你使用.Equals!【参考方案4】:

作为背景信息:IsNaN() 方法所做的是return v != v;

【讨论】:

没有。见Reference source

以上是关于与 Double.NaN 相等的主要内容,如果未能解决你的问题,请参考以下文章

将 Double.NaN 与自身进行比较

javascript中的抽象相等==与严格相等===

js中的相等与不相等

判断两个字符串是不是相等 正解的表达方式是

对象相等与不相等

为啥 Double.NaN==Double.NaN 返回 false?