与 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 相等的主要内容,如果未能解决你的问题,请参考以下文章