问题描述
程序中一个不到50000行的datatable,计算std就出错,少一些行就没问题,自己用系列代码实验了下,超过超过46341行o的结果就是“Nan”,转换完就是“非数字”,求解DataTabledt=newDataTable();dt.Columns.Add(newDataColumn("a",typeof(double)));dt.Columns.Add(newDataColumn("b",typeof(double)));for(inti=0;i<46500;i++){DataRowdr=dt.NewRow();if(i<44000){dr["a"]=5000.32;dr["b"]=i;}else{dr["a"]=i;dr["b"]=i;}dt.Rows.Add(dr);if(i>=46300){objecto=dt.Compute("StDev(a)","");if(o.ToString().Equals("非数字")){}}}
解决方案
解决方案二:
你的计算溢出了
解决方案三:
引用1楼D56233577的回复:
你的计算溢出了
stdev只能最多计算46000多行?excel的stdev就可以计算,另外我现在自己写个替代stdev的算法,就可以计算了。
解决方案四:
我曾经碰到过,有行数限制,具体多少忘了。好像是设计上的BUG你可以计算样本的标准差,不一定是全部下面是当时记录的网址https://social.msdn.microsoft.com/Forums/en-US/5e4522d2-cbe4-4d51-bc8c-3db466a1b4f9/stdev-returns-nan?forum=adodotnetdataproviders
解决方案五:
引用2楼kevinwen0413的回复:
Quote: 引用1楼D56233577的回复:
你的计算溢出了stdev只能最多计算46000多行?excel的stdev就可以计算,另外我现在自己写个替代stdev的算法,就可以计算了。
对,compute计算平均值没有这么小行的限制,你可以用公式计算