代码之家  ›  专栏  ›  技术社区  ›  Chris Cudmore

与double.nan相等

  •  30
  • Chris Cudmore  · 技术社区  · 15 年前

    我有以下代码…

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

    输出:

    NaN USD
    

    给出了什么?

    我使用double.nan来表示该值不存在,也不应该被输出。

    4 回复  |  直到 7 年前
        1
  •  55
  •   Andrew Hare    15 年前

    也许你在找 IsNaN 静态功能?

    尝试如下操作:

    if (!Double.IsNaN(Price_Foreign))
    {
       output.Append(spacer);
       output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
    }
    
        2
  •  27
  •   Vulcano Harry Berry    7 年前

    这个 IEEE 754 floating point standard 表示将Nan与Nan Will进行比较 总是 返回错误。如果必须这样做,请使用double.isnan()。

    但是,这不是做你想做的事情的最佳方式。双打不精确,你用它们来表示价格。我敢打赌,在某种程度上,你也会想比较一下平等的价格。那不起作用,因为 you can't rely on floating point equality .

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

        3
  •  9
  •   Martijn Courteaux    14 年前

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

        4
  •  8
  •   Grant Wagner    15 年前

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

    Double.NaN Field 在.NET Framework类库文档中:

    使用 IsNaN 确定一个值 不是数字。不可能 确定值是否不是 把它和另一个比较 值等于NaN。