c#中的excel percentrank算法是什么?

时间:2013-07-29 08:27:42

标签: c# excel

enter image description here

根据图片,我想在我的c#项目中使用excel percentrant函数。解决方案是什么?

3 个答案:

答案 0 :(得分:4)

基于this thread

private static double PercentRank(List<double> matrix, double value)
{
    matrix.Sort();

    for (int i = 0; i < matrix.Count; i++)
        if (matrix[i] == value)
            return ((double)i) / (matrix.Count - 1);

    // calculate value using linear interpolation
    double x1, x2, y1, y2;

    for (int i = 0; i < matrix.Count - 1; i++)
    {
        if (matrix[i] < value && value < matrix[i + 1])
        {
            x1 = matrix[i];
            x2 = matrix[i + 1];
            y1 = PercentRank(matrix, x1);
            y2 = PercentRank(matrix, x2);

            return (((x2 - value) * y1 + (value - x1) * y2)) / (x2 - x1);
        }
    }

    throw new Exception("Out of bounds");
}

答案 1 :(得分:0)

JavaScript中的示例实现(匹配Office docs的结果)。

function percentrank(x, vec) {
    var s = 0;
    var b = 0;
    for (var k = 0; k < vec.length; k++) {
       if (vec[k] < x) {
           s += 1;
       } else {
           b += 1;
       }
    }
    return s/(s+b-1);
}

用法:

  

百分比(2,[13,12,11,8,4,3,2,1,1,1])

答案 2 :(得分:-4)

您可以使用interOp库。但是,如果这应该用于格栅护理,因为如果有漏洞或内存泄漏,它可能最终在desater。这是因为您打电话并创建一个单独的流程来完成您的工作。特别不推荐用于ASP.net。

以下是一篇关于如何做的好文章。

http://support.microsoft.com/kb/306683