我得到了一个公式来计算净现值使用租金,期间数,贴现率和未来值。我能够获得现值,但我需要一个公式来计算净现值在今天的日期或用户输入的任何日期。我的代码如下:
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,所以任何帮助都将不胜感激。谢谢。
发布于 2018-09-25 22:37:08
在我的项目中遇到了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.77488497429JavaScript ES6函数:
https://www.evermade.fi/net-present-value-npv-formula-for-javascript/
/**
* 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) {
return cashFlows.reduce(
(accumulator, currentValue, index) =>
accumulator + currentValue / Math.pow(rate / 100 + 1, index + 1),
initialCost
);
}我已经在我的博客上解释了大部分。
希望这能有所帮助:)
发布于 2018-03-14 23:26:38
你忽略的一件重要的事情就是成本。你有周期,有利率,你有利率百分比。但这里没有任何“成本”。
你说你有Excel和其他语言的版本。如果您了解Excel中的计算,那么您可能会理解如何在JavaScript中进行计算。
在Excel中,你可以使用漂亮的函数=NPV(....,它有两个参数。第一个是"RATE“,第二个是"VALUE”,可以是多个值。在Excel中执行此操作时,传递的其中一个值将是总成本。所以你有这样的东西……
=NPV(2%,[total cost],[Year1Value],[Year2Value],[Year3Value],....)或=NPV(A1,A2:A12)
“总成本”会在第一年末你花费money....assuming its的地方,它会在“价值”/第一年的回报之前。
话虽如此,要考虑的另一件事是确定何时需要成本。
如果成本是前期的,那么它将从值的“数组”部分中取出,并添加到NPV计算中,例如...
=NPV(A1,A3:A12) + A2
其中单元格A2是成本(前期),A1是费率,A3-A12是所有回报。
举个简单的例子,如果你在页面的某处有rate,你可以遍历将要传递给它的参数,如下所示……
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/之类的库
发布于 2018-11-02 01:08:51
这对我很有效
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;
}https://stackoverflow.com/questions/49280397
复制相似问题