-1

在此处输入图像描述

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

4

3 回答 3

4

基于这个线程

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");
}
于 2013-07-29T08:49:14.033 回答
0

JavaScript 中的示例实现(与Office 文档中的结果匹配)。

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);
}

用法:

percentrank(2, [13, 12, 11, 8, 4, 3, 2, 1, 1, 1])

于 2014-11-19T14:17:39.267 回答
-4

您可以使用 interOp 库。但是,如果应该小心使用它,因为如果存在漏洞或内存泄漏,它可能会以失败告终。这是由于您调用并创建了一个单独的进程来完成您的工作。特别不推荐用于 ASP.net。

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

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

于 2013-07-29T08:45:43.820 回答