我得到一个公式来计算使用租金,期数,贴现率和未来价值的净现值。我能够获得现值,但是,我需要一个公式来计算今天的净现值&# 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,所以我们将非常感谢任何帮助。谢谢。
答案 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)
你遗失的一件大事就是成本。 你有期间,你有费率,你有比率。但是没有什么可以用于&#34;成本&#34;。
你说你在Excel和其他语言中都有这个。如果您了解Excel中的计算,那么您可能会理解如何在JavaScript中进行计算。
在Excel中,你使用漂亮的函数=NPV(....
,它需要2个参数。第一个是&#34; RATE&#34;第二个是&#34; VALUE&#34;这可以是多个值。在Excel中执行此操作时,传入的值之一将是总成本。所以你有这样的东西......
=NPV(2%,[total cost],[Year1Value],[Year2Value],[Year3Value],....)
或=NPV(A1,A2:A12)
&#34;总成本&#34;会去你花钱的地方....假设它在第一年结束时,它将会超过&#34;值&#34; /从第一年回来。
话虽如此,另外需要考虑的是确定何时需要成本 如果成本是预先的,那么它将被取出&#34;数组&#34;值部分并添加到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;
}