忽略总和中的NaN

时间:2014-12-11 16:56:10

标签: c# nan

我想总结10个双变量,但是这些变量中的一些可能包含" NaN"。有没有办法忽略那些" NaN"从总结。现在我有一个简单的添加,如下所示,但它分配SumLiq ..变量" NaN"值。

double SumLiqPerTimeStamp = l2_msg.size0 + l2_msg.size1 + l2_msg.size2 + l2_msg.size3
                           +l2_msg.size4 + l2_msg.size5 + l2_msg.size6 + l2_msg.size7 +  l2_msg.size8 + l2_msg.size9;

是否有一种快速有效的方法来检查" NaN"而不通过每个的if语句?

3 个答案:

答案 0 :(得分:3)

NMaybe你可以将它们放在一个数组中并获得Sum()

double SumLiqPerTimeStamp = new double[]{ l2_msg.size0 , l2_msg.size1 , l2_msg.size2 , l2_msg.size3
                       ,l2_msg.size4 , l2_msg.size5 , l2_msg.size6 , l2_msg.size7 ,  l2_msg.size8 , l2_msg.size9 }.Where( x => !double.IsNaN(x) ).Sum();

答案 1 :(得分:1)

如果输入为NaN,则使用返回零的扩展方法:

public static double Value(this double input)
{
    return input == Double.NaN ? 0 : input;
}

然后将您的值汇总为

var sum = l2_msg.size0.Value() + l2_msg.size1.Value() + ...

答案 2 :(得分:0)

将属性Size添加到msg类型,该类型将在返回前检查该值,如果是NaN则返回0.