【问题标题】:Equality with Double.NaN与 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 表示该值不存在,不应该输出。

【问题讨论】:

    标签: c# equality 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;

      【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2010-11-11
      • 2012-02-07
      • 2013-01-05
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多