Функция PMT в Javascript
Я хочу использовать функцию Excel PMT в Javascript. Параметр будет
Pmt (interest_rate, number_payments, PV, FV, Type )
interest_rate : the interest rate for the loan.
number_payments : the number of payments for the loan.
PV : the present value or principal of the loan.
FV : It is the future value or the loan amount outstanding after all payments have been made.
Type is : It indicates when the payments are due. Type can be one of the following values:
0, 1
Вы можете обратиться : http://www.techonthenet.com/excel/formulas/pmt.php
это код, который я использую, я застрял в последнем параметре. Который "типа" 0 или 1. Как это влияет на расчеты, пожалуйста.
function PMT (ir, np, pv, fv ) {
/*
ir - interest rate per month
np - number of periods (months)
pv - present value
fv - future value (residual value)
*/
pmt = ( ir * ( pv * Math.pow ( (ir+1), np ) + fv ) ) / ( ( ir + 1 ) * ( Math.pow ( (ir+1), np) -1 ) );
return pmt;
}
мне нужно это в простой js, а не в jQuery pls. Спасибо заранее
3 ответов
самый простой способ понять влияние параметра типа-попробовать следующие значения: годовой процент = 12%, число месяцев = 1, текущее значение = 100
когда Type=0 (по умолчанию), функция PMT () даст 101
когда Type=1, функция PMT () даст 100
при Type=0 проценты рассчитываются за 1 месяц, так как платеж предполагается в конце месяца. Для типа=1 проценты вычисляются в течение 0 месяцев, поскольку оплата производится в начале месяца.
Это моя версия функции PMT после некоторого googling:
function PMT(ir, np, pv, fv, type) {
/*
* ir - interest rate per month
* np - number of periods (months)
* pv - present value
* fv - future value
* type - when the payments are due:
* 0: end of the period, e.g. end of month (default)
* 1: beginning of period
*/
var pmt, pvif;
fv || (fv = 0);
type || (type = 0);
if (ir === 0)
return -(pv + fv)/np;
pvif = Math.pow(1 + ir, np);
pmt = - ir * pv * (pvif + fv) / (pvif - 1);
if (type === 1)
pmt /= (1 + ir);
return pmt;
}
и я использую его как:
Interest rate = 7%
Number of months = 12
Present value = €1000
PMT(0.07/12, 24, 1000) = -44.77257910314528
Due import = pmt.toFixed(2) * 24 = 1074.48
здесь, в моей версии PMT
PMT: function(rate, nperiod, pv, fv, type) {
if (!fv) fv = 0;
if (!type) type = 0;
if (rate == 0) return -(pv + fv)/nperiod;
var pvif = Math.pow(1 + rate, nperiod);
var pmt = rate / (pvif - 1) * -(pv * pvif + fv);
if (type == 1) {
pmt /= (1 + rate);
};
return pmt;
},
/ / / / / вызовите PMT
var result = PMT(6.5/1200 , 30*12 , 65000 , 0 , 0);
console.log(result);
//// result : -410.8442152704279
/ / / другие, а также IPMT и PPMT
IPMT: function(pv, pmt, rate, per) {
var tmp = Math.pow(1 + rate, per);
return 0 - (pv * tmp * rate + pmt * (tmp - 1));
},
PPMT: function(rate, per, nper, pv, fv, type) {
if (per < 1 || (per >= nper + 1)) return null;
var pmt = this.PMT(rate, nper, pv, fv, type);
var ipmt = this.IPMT(pv, pmt, rate, per - 1);
return pmt - ipmt;
},