在C#中的WorksheetFunction.Quartile等效

我们目前正在做一个MS-Access到.Net的网页项目。 在MS-Access VBA代码中,他们使用了“WorksheetFunction.Quartile”function。 请让我知道C#中的等效函数。

VBA中的示例用法:

Q1 = WorksheetFunction.Quartile(arrY,1)

请使用下面的C#代码

方法代码

internal static double QUARTILE(double[] array, int nth_quartile) { Array.Sort(array); double dblPercentage = 0; switch (nth_quartile) { case 0: dblPercentage = 0; //Smallest value in the data set break; case 1: dblPercentage = 25; //First quartile (25th percentile) break; case 2: dblPercentage = 50; //Second quartile (50th percentile) break; case 3: dblPercentage = 75; //Third quartile (75th percentile) break; case 4: dblPercentage = 100; //Largest value in the data set break; default: dblPercentage = 0; break; } if (dblPercentage >= 100.0d) return array[array.Length - 1]; double position = (double)(array.Length + 1) * dblPercentage / 100.0; double leftNumber = 0.0d, rightNumber = 0.0d; double n = dblPercentage / 100.0d * (array.Length - 1) + 1.0d; if (position >= 1) { leftNumber = array[(int)System.Math.Floor(n) - 1]; rightNumber = array[(int)System.Math.Floor(n)]; } else { leftNumber = array[0]; // first data rightNumber = array[1]; // first data } if (leftNumber == rightNumber) return leftNumber; else { double part = n - System.Math.Floor(n); return leftNumber + part * (rightNumber - leftNumber); } } 

testing代码

 double FirstQuartile = QUARTILE(numbers, 1); double Median = QUARTILE(numbers, 2); double ThirdQuartile = QUARTILE(numbers, 3); 

我不知道这样包装好的小function,虽然会很有帮助。 我build议安装math.NET http://www.mathdotnet.com/

这里显示了包含在SortedArrayStatistics中的所有内容http://numerics.mathdotnet.com/api/MathNet.Numerics.Statistics/SortedArrayStatistics.htm

以下是我相信满足您的需求的一个四分之一的例子

 using System; using MathNet.Numerics.Statistics; class Test { static void Main() { double[] numbers = new double[] { 1, 2, 3, 4, 5 }; double a = SortedArrayStatistics.Minimum(numbers); double b = SortedArrayStatistics.LowerQuartile(numbers); double c = SortedArrayStatistics.Median(numbers); double d = SortedArrayStatistics.UpperQuartile(numbers); double e = SortedArrayStatistics.Maximum(numbers); Console.WriteLine("{0}\n{1}\n{2}\n{3}\n{4}\n", a,b,c,d,e); } } 

产量

 1 1.66666666666667 3 4.33333333333333 5