计算净现值

时间:2018-03-14 14:31:23

标签: javascript html

我得到一个公式来计算使用租金,期数,贴现率和未来价值的净现值。我能够获得现值,但是,我需要一个公式来计算今天的净现值&# 39;日期或用户输入的任何日期。我的代码如下:

   function PV() 
   var future=5000;
   var type=1;       
   periods=12;
   rate = document.getElementById("rate").value;
   var ratePercent = periods*100;
   rate =  Math.pow(1+rate/100,1/365)-1;

   rate = eval(rate);
   periods = eval(periods);

 // Return present value
if (rate === 0) {
document.getElementById("presentResultValue").value = - payment * periods - future;

} else {
document.getElementById("presentResultValue").value =((((1 - Math.pow(1 + rate, periods)) / rate) * payment * (1 +rate * type) - future) / Math.pow(1 + rate, periods)).toFixed(2);
}

}

我也使用Excel来计算这个,但需要一种方法将其转换为Javascript。我也将我的工作与excel联系在一起。ExcelNPV我仍然在学习JavaScript,所以我们将非常感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:1)

在我的项目中使用 NPV公式,必须为其创建一个函数。 Finance.js很棒,但是我不想让代码混乱,因为我的问题只是得到这个公式。

ES5功能

/**
* Calculates the Net Present Value of a given initial investment
* cost and an array of cash flow values with the specified discount rate.
*
* @param {number} rate - The discount rate percentage
* @param {number} initialCost - The initial investment
* @param {array} cashFlows - An array of future payment amounts
* @return {number} The calculated Net Present Value
*/
function getNPV(rate, initialCost, cashFlows) {
    var npv = initialCost;

    for (var i = 0; i < cashFlows.length; i++) {
        npv += cashFlows[i] / Math.pow(rate / 100 + 1, i + 1);
    }

    return npv;
}

使用此功能:

var rate = 10;
var initialCost = -25000;
var cashFlows = [-10000, 0, 10000, 30000, 100000];

console.log(getNPV(rate, initialCost, cashFlows));
// expected output: 56004.77488497429

JavaScript ES6功能: https://www.evermade.fi/net-present-value-npv-formula-for-javascript/

我已经在我的博客文章中解释了大部分内容。

希望这会有所帮助:)

答案 1 :(得分:0)

你遗失的一件大事就是成本。 你有期间,你有费率,你有比率。但是没有什么可以用于"成本"。

你说你在Excel和其他语言中都有这个。如果您了解Excel中的计算,那么您可能会理解如何在JavaScript中进行计算。

在Excel中,你使用漂亮的函数=NPV(....,它需要2个参数。第一个是" RATE"第二个是" VALUE"这可以是多个值。在Excel中执行此操作时,传入的值之一将是总成本。所以你有这样的东西......

=NPV(2%,[total cost],[Year1Value],[Year2Value],[Year3Value],....)=NPV(A1,A2:A12)

"总成本"会去你花钱的地方....假设它在第一年结束时,它将会超过"值" /从第一年回来。

话虽如此,另外需要考虑的是确定何时需要成本 如果成本是预先的,那么它将被取出"数组"值部分并添加到NPV计算中,例如....

=NPV(A1,A3:A12) + A2

其中,单元格A2是成本(前期),A1是费率,A3-A12是所有回报。

作为一个简单的例子,如果您在页面上的某个位置具有速率,则可以循环传递给它的参数,如下面的....

function NPV() {
  var args = [];
  for (i = 0; i < arguments.length; i++) {
    args = args.concat(arguments[i]);
  }

  var rate = document.getElementById("rate").value;
  var value = 0;

  // loop through each argument, and calculate the value 
  // based on the rate, and add it to the "value" variable 
  // creating a running total
  for (var i = 1; i < args.length; i++) {
    value = value + ((args[i])/(Math.pow(1 + rate, i)));
  }

  return value;
}

此外,您还可以查找Finanace.JS http://financejs.org/

等库

答案 2 :(得分:0)

这对我有用

function getNPV(rate, a, payment) {
        var npv = 0;
        for (var i = 0; i < a.length; i++) {
            npv += payment / Math.pow(1 + rate, a[i]);
            console.log(payment / Math.pow(1 + rate, a[i]))
        }
        return npv;
    }