Функция 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;
},