Javascript IRR(内部 yield )公式准确性

标签 javascript jquery excel math excel-formula

我在 javascript 中使用 IRR 函数来创建计算 a,该计算是在 excel 中使用其自己的 IRR 函数完成的。问题是我的有点不对劲,我不知道为什么。下面是代码。

var IRRval = [];

IRRval.push(-financed);
for (i = 0; i < period; i++) {
    IRRval.push(rental);
}

var IRR = IRRCalc(IRRval, 0.001) * 0.01;

function IRRCalc(CArray, guest) {
    inc = 0.000001;
    do {
        guest += inc;
        NPV = 0;
        for (var j=0; j < CArray.length; j++) {
            NPV += CArray[j] / Math.pow((1 + guest), j);
        }
    } while (NPV > 0);
    return guest * 100;
}

现在,如果您使用这些数字:

<小时/>

第 24 期

融资22000

租金1017.5000

我的结果是:0.008523000000000175

Excel 结果是:0.008522918

<小时/>

<小时/>

第 42 期

融资218000

租金5917.1429

我的结果是:0.006247000000000489

Excel 结果是:0.00624616

<小时/>

调用 Excel 函数:=IRR(T12:T73,0.01) T12-T73 与我使用的数字相同。

任何帮助将不胜感激,谢谢杰森

更新

我已经通过更改下面的值解决了这个问题。但现在表现太慢了。关于如何改进这个问题有什么想法吗?

IRRCalc(IRRval, 0.001)

//to

IRRCalc(IRRval, 0.0001)

inc = 0.000001;

//to

inc = 0.00000001;

最佳答案

我们修改了代码以实现性能和准确性。试试这个:

function IRRCalc(CArray) {

  min = 0.0;
  max = 1.0;
  do {
    guest = (min + max) / 2;
    NPV = 0;
    for (var j=0; j<CArray.length; j++) {
          NPV += CArray[j]/Math.pow((1+guest),j);
    }
    if (NPV > 0) {
      min = guest;
    }
    else {
      max = guest;
    }
  } while(Math.abs(NPV) > 0.000001);
  return guest * 100;
}

关于Javascript IRR(内部 yield )公式准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15089151/

相关文章:

excel - 如果,那么,重复 Excel 公式

javascript - 访问所有局部变量

javascript - Ajax 无法在 Featherlight 中运行

javascript - JQuery Form仅在某些浏览器中提交

javascript - 页面刷新后div有不同的宽度

performance - Range() VS Cells() - 运行时间

excel - 在 If 语句中使用变量作为子句

c# - 在 C# 中的 SelectedNodeChanged 事件处理程序中调用 javascript

javascript - 在一个日历中选择日期范围

javascript - 动画后图像抗锯齿