幫人分析資料要用到的函數,上網找了一下,使用跟Excel的PERCENTILE函數相同的處理方法
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:
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
