首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WorksheetFunction.Quartile等价于c#

WorksheetFunction.Quartile等价于c#
EN

Stack Overflow用户
提问于 2015-07-16 10:16:51
回答 2查看 2.3K关注 0票数 0

我们目前正在做一个MS访问.Net网页的项目.在MS代码中,他们使用了"WorksheetFunction.Quartile“函数。请告诉我C#中的等效函数。

VBA中的示例用法:

Q1 = WorksheetFunction.Quartile(arrY,1)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-21 10:23:45

请使用以下C#代码

方法码

代码语言:javascript
复制
  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);
        }
    } 

测试代码

代码语言:javascript
复制
double FirstQuartile = QUARTILE(numbers, 1);
double Median = QUARTILE(numbers, 2);
double ThirdQuartile = QUARTILE(numbers, 3);     
票数 2
EN

Stack Overflow用户

发布于 2015-07-16 12:09:14

我不知道有什么像这样的好的小功能,虽然会很有帮助。我建议安装math.NET http://www.mathdotnet.com/

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

下面是一个四分位数的例子,我相信它能满足您的需要。

代码语言:javascript
复制
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);
    }
}

输出

代码语言:javascript
复制
1
1.66666666666667
3
4.33333333333333
5
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31451446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档