我如何过滤掉 NaN 值并将其替换为另一个值
Posted
技术标签:
【中文标题】我如何过滤掉 NaN 值并将其替换为另一个值【英文标题】:how can i filter out NaN values and replace it with another value 【发布时间】: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");
【问题讨论】:
Why is double.NaN not equal to itself? 的可能重复项 【参考方案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;
【讨论】:
以上是关于我如何过滤掉 NaN 值并将其替换为另一个值的主要内容,如果未能解决你的问题,请参考以下文章