【问题标题】:how can i filter out NaN values and replace it with another value我如何过滤掉 NaN 值并将其替换为另一个值
【发布时间】:2014-02-08 10:46:19
【问题描述】:

我尝试使用 for 循环过滤掉 null 和 nan 值,但仍然将 nan 值添加到列表视图中。这只是计算完成的部分。

double rs1 = (qz1 * c11) + (asg1 * c22) + (sw1 * c33) + (prj1 * c44) + (pxm1 * c55) + (atti1 * c66);
if(rs1 != double.NaN || rs1 != null)
{
lst.SubItems.Add(Math.Round(rs1, 2).ToString());
}
else
{
lst.SubItems.Add("0");
}

【问题讨论】:

标签: c# listview nan


【解决方案1】:

使用IsNan静态函数,阅读它here

你的代码应该是这样的

if(!Double.IsNaN(rs1)  || rs1 != null)

带有 NaN 的 NaN 将始终返回 false,this is MSDN about NaN

两个 NaN 值被认为是不相等的。因此,无法通过使用相等运算符将一个值与另一个等于 NaN 的值进行比较来确定一个值是否不是数字

【讨论】:

    【解决方案2】:

    不幸的是,当您使用 double.NaN 测试不等式时,它总是返回 true(值本身未定义)。最好使用double.IsNaN(rs1)

    【讨论】:

      【解决方案3】:

      首先,它不能为null,因为double是值类型而不是引用类型。所以rs1 != null是多余的。其次你应该使用IsNaN方法而不是用==检查相等性

      if(!double.IsNaN(rs1))
      {
         ...
      }
      

      【讨论】:

        【解决方案4】:

        if(!Double.IsNaN(rs1)(float x = 0; x = (float)rs1;}

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-09
          • 2018-09-02
          • 2021-02-18
          • 1970-01-01
          • 1970-01-01
          • 2015-12-31
          相关资源
          最近更新 更多