Функция PMT в Javascript

Я хочу использовать функцию Excel PMT в Javascript. Параметр будет

Pmt(процентная_ставка, количество_платежей, PV, FV, тип)

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;
}

Мне нужно это в простом Javascript, а не в jQuery, пожалуйста.


person dps123    schedule 14.03.2011    source источник


Ответы (5)


Самый простой способ понять влияние параметра «Тип» — попробовать следующие значения: годовой процент = 12%, количество месяцев = 1, текущая стоимость = 100.

Когда Type=0 (по умолчанию), функция PMT() возвращает 101

Когда Type=1, функция PMT() даст 100

При Type=0 проценты рассчитываются за 1 месяц, поскольку предполагается, что платеж будет в конце месяца. Для Type=1 проценты рассчитываются за 0 месяцев, поскольку платеж производится в начале месяца.

person Nik Kalyani    schedule 14.03.2011

это моя версия функции PMT после некоторого поиска в Google:

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;
}

Пример Какой ежемесячный платеж необходим для погашения кредита в размере 200 000 долларов США через 15 лет при годовой процентной ставке 7,5%?

ir = 0.075 / 12
np = 15 * 12
pv = 200000
pmt = PMT(ir, np, pv).toFixed(2) = -1854.02
payoff = pmt * np = -333723.6
person vault    schedule 13.03.2014
comment
Могу я спросить, откуда вы взяли 24 в вашем расчете? Спасибо. - person daviestar; 10.12.2014
comment
Честно не помню. Судя по коду, 0.07/12 — проценты в месяц, 24 — количество месяцев, в течение которых происходил платеж. - person vault; 10.12.2014
comment
@vault, вычисления значения fv неверны, потому что pv * (pvif + fv) должно быть (pv * pvif + fv) - person Calin Pirtea; 16.08.2019

здесь, в моей версии 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;
},

//// Вызов ПМТ

 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;
},
person M Arfan    schedule 17.10.2016

Я решил это с помощью следующей функции, благодаря сайту tvmcalcs.com, Пример с авансовыми платежами.

function pmt(monthlyRate, monthlyPayments, presentValue, residualValue, advancedPayments) {
        t1 = 1+monthlyRate
        t2 = Math.pow(t1,monthlyPayments)
        t3 = Math.pow(t1,(monthlyPayments-advancedPayments))
        return (presentValue-(residualValue/t2))/(((1-(1/(t3)))/monthlyRate)+advancedPayments);
    }

или если у вас, как в нашем случае, годовая ставка

function pmtWithAnnualRate(annualRate, monthlyPayments, presentValue, residualValue, advancedPayments) {
    monthlyRate = annualRate / 1200
    t1 = 1 + monthlyRate
    t2 = Math.pow(t1,monthlyPayments)
    t3 = Math.pow(t1,(monthlyPayments-advancedPayments))
    return (presentValue-(residualValue/t2))/(((1-(1/(t3)))/monthlyRate)+advancedPayments);
}
person Tobias Lanz    schedule 31.10.2018

PMT - (Pmt - это периодическая сумма, которую нужно заплатить / получить) функция в javascript

var AnualRate = 0.05; //5% interste rate
var NumberOfYear = 10;
var NumberOfPayments = NumberOfYear * 12;
var ByYear = 12;
var LoanAmount = 20000;
var FutureValue = 0;

var PresentValueInterstFector = Math.pow((1 + AnualRate/ByYear), NumberOfPayments);
var PeriodicPayment =  (AnualRate/ByYear) * LoanAmount  * (PresentValueInterstFector + FutureValue)/(PresentValueInterstFector-1); 

var TotalCost = PeriodicPayment * NumberOfPayments;
var TotalInterset = TotalCost - LoanAmount; 

console.log("TotalCost ", TotalCost);
console.log("TotalInterset ", TotalInterset);

используя функцию javascript

var interestRate = 0.05; // or (5/100) this rate is annual
var numberofYear = 10;
var numberofPayment = numberofYear * 12; 
var presentValue = 20000; //this is loan 

function PMT(ir,np, pv, fv = 0){ 
 var presentValueInterstFector = Math.pow((1 + ir), np);
 var pmt = ir * pv  * (presentValueInterstFector + fv)/(PresentValueInterstFector-1); 
 return pmt;
}

var testPMT = PMT(interestRate/12, numberofPayment, presentValue); //output 
console.log(testPMT); 

Калькулятор стоимости денег во времени

function calculate(){

 var getRate          = parseFloat(document.getElementById('rate').value);
 var getNumberOfYears = parseInt(document.getElementById('numOfYears').value);
 var getNumOfPayments = parseInt(document.getElementById('numOfPayments').value);
 var getLoanAmount    = parseFloat(document.getElementById('loanAmount').value);

 var pmt = PMT(getRate/12, getNumOfPayments, getLoanAmount);
 document.getElementById('disMonthlypayment').innerHTML = pmt;

 var totalCost = pmt * getNumOfPayments;
 document.getElementById('disTotalcost').innerHTML = totalCost;

 var totalInterset = totalCost - getLoanAmount;
 document.getElementById('disTotalInterst').innerHTML = totalInterset;

}

 //PMT function (Fazlan refer this)

function PMT(ir,np, pv, fv = 0){ 
 // ir: interest rate
 // np: number of payment
 // pv: present value or loan amount
 // fv: future value. default is 0

 var presentValueInterstFector = Math.pow((1 + ir), np);
 var pmt = ir * pv  * (presentValueInterstFector + fv)/(presentValueInterstFector-1); 
 return pmt;
}
<table>
<tr><td>Rate               : </td><td> <input type="text" id="rate"          placeholder="0.05" />  ex: 0.05 = (5/100) </td></tr>
<tr><td>Number of Years    : </td><td> <input type="text" id="numOfYears"    placeholder="10" />    </td></tr>
<tr><td>Number of Payments : </td><td> <input type="text" id="numOfPayments" placeholder="120" />   Number of Years * 12  </td></tr>
<tr><td>Loan Amount        : </td><td> <input type="text" id="loanAmount"    placeholder="20000" /> </td></tr>

<tr><td>Monthly Payment : </td><td> <b id="disMonthlypayment"></b> </td></tr>
<tr><td>Total Cost      : </td><td> <b id="disTotalcost"></b>      </td></tr>
<tr><td>Total Interest  : </td><td> <b id="disTotalInterst"></b>   </td></tr>

<tr><td><button onclick="calculate()">Calculate</button></td></tr>

</table>

person Mohamed Rimsan    schedule 10.12.2020
comment
Это похоже на весь Javascript. - person jqueryHtmlCSS; 10.12.2020