Функция PMT Тип оплаты

Ниже моя функция для расчета платежа по кредиту. Как и в Excel, мне нужно добавить еще один параметр, который является типом платежа.

function PMT (ir, np, pv, fv ) {
 /*
 ir - interest rate per month
 np - number of periods (months)
 pv - present value
 fv - future value (residual value)
 type - 0 or 1 need to implement that
 */
 pmt = ( ir * ( pv * Math.pow ( (ir+1), np ) + fv ) ) / ( ( ir + 1 ) * ( Math.pow ( (ir+1), np) -1 ) );
 return pmt;
}

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

Может ли кто-нибудь помочь мне изменить вышеуказанную функцию с помощью этой функции PaymentType?

http://www.techonthenet.com/excel/formulas/pmt.php


person dps123    schedule 18.03.2011    source источник
comment
Это код javascript, верно? Если да, удалите все теги, кроме javascript. Кроме того, каков ваш фактический вопрос.   -  person Chris Haas    schedule 18.03.2011
comment
Если это .Net, есть метод (Financial.Pmt), который рассчитает для вас платеж. Одним из аргументов является то, как применять проценты (начало или конец).   -  person dbasnett    schedule 19.03.2011


Ответы (3)


Я не уверен, для чего вам нужен PaymentType, но вот то, что я использую для функции PMT в С#, это чистая функция PMT С#:

public static double PMT(double yearlyInterestRate, int totalNumberOfMonths, double loanAmount)
{
    var rate = (double) yearlyInterestRate / 100 / 12;
    var denominator = Math.Pow((1 + rate), totalNumberOfMonths) - 1;
    return (rate + (rate/denominator)) * loanAmount;
}

Применение:

PMT(7, 360, 120000);
// Result: 798.36
PMT(4.5, 360, 137500.47);
// Result: 696.69
PMT(4.13, 360, 61520);
// Result: 298.33
PMT(6.38, 360, 89200);
// Result: 556.78
person stack247    schedule 04.04.2015

Используя ответ @stack247, если есть вероятность, что годовая процентная ставка может составлять 0%, вы можете добавить это:

private decimal Pmt(double yearlyInterestRate, int totalNumberOfMonths, double loanAmount)
{
    if (yearlyInterestRate > 0)
    {
        var rate = (double) yearlyInterestRate / 100 / 12;
        var denominator = Math.Pow((1 + rate), totalNumberOfMonths) - 1;
        return new decimal((rate + (rate / denominator)) * loanAmount);
    }
    return totalNumberOfMonths > 0 ? new decimal(loanAmount / totalNumberOfMonths) : 0;
}
person Beastwood    schedule 06.08.2018

person    schedule
comment
Добавьте пояснение к ответу! - person Prashant Pimpale; 24.08.2019