前言:这篇博客里写的DataTable中的Compute方法中有STDEV方法的使用,但是没有没有STDEVP方法。犯了愁。客户要求就得用STDEVP那怎么办。网上找了好多,有一篇写的是我想要的。在此总结一下!
先上一个StDev:
string StDevValue= table.Compute("StDev(field)", "field>0");
大概这个样子。
STDEVP:
DataRow[] ddr = data.Select(dt2.Rows[j]["field"].ToString() + " is not null ");
double[] array = new double[ddr.Length];
int di = 0;
foreach (DataRow ddrs in ddr)
{
array[di] = Convert.ToDouble(ddrs[dt2.Rows[j]["field"].ToString()]);
di++;
}
double stdDev = CalculateStdDev(array);
dr[dt2.Rows[j]["field"].ToString()] = stdDev;
上边的这一块代码是我这自己需要的。懒得整理。凑活看;你根据你的需求自己调整
//主要部分
private static double CalculateStdDev(IEnumerable<double> values)
{
double ret = 0;
if (values.Count() > 0)
{
// 计算平均数
double avg = values.Average();
// 计算各数值与平均数的差值的平方,然后求和
double sum = values.Sum(d => Math.Pow(d - avg, 2));
// 除以数量,然后开方
ret = Math.Sqrt(sum / values.Count());
}
return ret;
}
主要这就完了。谢谢everyone