如何过滤掉NaN值并将其替换为另一个值

时间:2014-01-19 07:01:38

标签: c# listview nan

iv'e尝试使用for循环过滤掉null和nan值,但仍将nan值添加到listview中。这只是计算完成的一部分。

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");
}

4 个答案:

答案 0 :(得分:4)

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

您的代码应如下所示

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

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

  

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

首先,它不能为null,因为double是值类型而不是引用类型。所以rs1 != null是冗余的。第二,你应该使用IsNaN方法而不是检查与==的相等性< / p>

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

答案 3 :(得分:0)

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