C# 在计算十进制标准偏差时获取OverflowException

C# 在计算十进制标准偏差时获取OverflowException,c#,.net,visual-studio,standard-deviation,C#,.net,Visual Studio,Standard Deviation,通过在文本框中插入值来计算标准偏差。我有以下代码: public decimal calcStd(List<int> ppValuesArray) { double std = 0; if (ppValuesArray.Count() > 0) { double avg = ppValuesArray.Average(); double sum = ppValuesArray.Sum(d => Math.Pow(d

通过在文本框中插入值来计算标准偏差。我有以下代码:

public decimal calcStd(List<int> ppValuesArray)
{
    double std = 0;
    if (ppValuesArray.Count() > 0)
    {
        double avg = ppValuesArray.Average();

        double sum = ppValuesArray.Sum(d => Math.Pow(d - avg, 2));

        std = Math.Sqrt((sum) / ppValuesArray.Count() - 1);
    }
    decimal stdDev = Convert.ToDecimal(std);
    return (decimal)stdDev;

}
public decimal calcStd(列表ppValuesArray)
{
双标准=0;
如果(ppValuesArray.Count()>0)
{
double avg=ppValuesArray.Average();
double sum=ppValuesArray.sum(d=>Math.Pow(d-avg,2));
std=Math.Sqrt((总和)/ppValuesArray.Count()-1);
}
十进制STDEV=转换为十进制(std);
返回(十进制)stdDev;
}
问题是,当我多次输入相同的值时,系统崩溃。e、 g.1,1,1,1会把它撞坏

我得到了一个错误:

System.OverflowException:'值对于十进制而言太大或太小。'


有什么想法吗

假设你在寻找样本标准偏差,你错过了除数-1中的括号,即

std = Math.Sqrt((sum) / (ppValuesArray.Count() - 1));
出现溢出的原因是
decimal
无法表示双精度值
NaN
,如果尝试取负数的平方根,则该值由
Math.Sqrt(double)
返回

还有,您为什么选择
列表
作为输入
decimal
double
似乎没有那么严格,这取决于您使用的数据类型,例如:

 public static decimal calcStd(IEnumerable<double> ppValuesArray)

谢谢@StuartLC。这是完美的,并修复了它。我知道这很愚蠢。我需要列表的类型为int为这部分的项目。还有很多其他的方法。为修复干杯。非常感谢。
if (ppValuesArray.Count() > 1)