UNPKG

irr-npv

Version:

node module for finance irr npv

43 lines (40 loc) 946 B
function PVCalc(money,interest,n){ return money / (Math.pow(1+interest,n)) } function NPVCalc(moneys,interest){ var res = 0 moneys.forEach(function(money,n){ res += PVCalc(money,interest,n+1) }) return res } function IRRCalc(CArray) { var min = -1.0; var max = 1.0; var guess = (min + max) / 2; var lastGuess = 1.0 var notSame = true var NPV = 0; do { NPV = 0; guess = (min + max) / 2; // console.log(guess,min,max) if (Math.abs(lastGuess-guess)<0.0000000000000000001) notSame = false lastGuess = guess for (var j=0; j<CArray.length; j++) { NPV += PVCalc(CArray[j],guess,j); } if (NPV > 0) { min = guess; } else { max = guess; } } while(notSame && (Math.abs(NPV) > 0.0000000000000000001)); var raw = parseFloat(guess * 100).toFixed(2); return parseFloat(raw); } var Engine = {} Engine.pv = PVCalc Engine.npv = NPVCalc Engine.irr = IRRCalc module.exports = Engine