我在 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/