[C#]實做PercenTile

文章分類: C#




幫人分析資料要用到的函數,上網找了一下,使用跟Excel的PERCENTILE函數相同的處理方法

?View Code CSHARP
public class PercenTile
{
    public static Decimal CalcPercenTile(List<Decimal> data, decimal percent)
    {
        if (percent < 0) throw new ArgumentException("percent must greater than 0");
        if (percent > 1) throw new ArgumentException("percent most less than 1");
 
        List<Decimal> _d = new List<decimal>(data);
        _d.Sort();
        Decimal n = percent * (_d.Count - 1) + 1;
 
        if (n == 1) return data[0];
        if (n == data.Count) return data.Last();
 
        int v = (int)n;
        Decimal d = n - v;
 
        return _d[v - 1] + (_d[v] - _d[v - 1]) * d;
    }
}

Usage:

?View Code CSHARP
List<Decimal> data = new List<decimal>() { 15, 20, 35, 45, 50 };
MessageBox.Show(PercenTile.CalcPercenTile(data, (Decimal)0.90).ToString());
MessageBox.Show(PercenTile.CalcPercenTile(data, (Decimal)0).ToString());
MessageBox.Show(PercenTile.CalcPercenTile(data, (Decimal)1).ToString());
MessageBox.Show(PercenTile.CalcPercenTile(data, (Decimal)1.90).ToString());

參考資料:

http://en.wikipedia.org/wiki/Percentile

http://office.microsoft.com/zh-hk/excel-help/HP005209211.aspx

發表回應

Bad Behavior has blocked 36 access attempts in the last 7 days.