Аннуитетная таблица амортизации в JavaScript

Мне нужна помощь с функцией, которая может рассчитать таблицу амортизации ипотечного аннуитета с выводом в полях и строках суммы платежа, основной суммы платежа, процентных платежей и т. Д., Отсортированных по каждому месяцу, как в ссылке ниже: Пример вывода

Формат выходного файла должен быть.cvs. На данный момент я застрял с этой ведьмой еще далеко от результата:

var i = 5/100;
var loanAmount = 15000;
var m = 12;

var monthlyPayment = loanAmount*(i/12)*Math.pow((1+i/12), m) / (Math.pow((1+i/12), m)-1)

var currentBalance = loanAmount;   
var paymentCounter = 1;
var totalInterest = 0;
monthlyPayment = monthlyPayment;
  
while(currentBalance > 0) {
    //this calculates the portion of your monthly payment that goes towards interest
    towardsInterest = (i/12)*currentBalance;  
  
    if (monthlyPayment > currentBalance){
        monthlyPayment = currentBalance + towardsInterest;
    }
  
    towardsBalance = monthlyPayment - towardsInterest;
    totalInterest = totalInterest + towardsInterest;
    currentBalance = currentBalance - towardsBalance;
}

Буду очень признателен за любую помощь в этом.

1 ответ

Попробуйте что-то вроде этого:

const annuity = (C, i, n) => C * (i/(1-(1+i)**(-n)));

const balance_t = (C, i, P) => {
  const period_movements = {
    base: C
  }
  period_movements.interest = C*i;
  period_movements.amortization = P - (C*i);
  period_movements.annuity = P;
  period_movements.final_value = Math.round((C - period_movements.amortization)*100)/100;

  return period_movements;
}

const display_mortgage = (C, i, n) => {
  const payements = annuity(C, i, n);
  let movements = balance_t(C, i, payements);
  while (movements.final_value>-.01){
    console.log(movements);
    movements = balance_t(movements.final_value, i, payements);
  }
}

display_mortgage(20000, 0.05, 4);

Выход:

{ base: 20000,
  interest: 1000,
  amortization: 4640.236652069255,
  annuity: 5640.236652069255,
  final_value: 15360 }
{ base: 15360,
  interest: 768,
  amortization: 4872.236652069255,
  annuity: 5640.236652069255,
  final_value: 10488 }
{ base: 10488,
  interest: 524.4,
  amortization: 5115.836652069255,
  annuity: 5640.236652069255,
  final_value: 5372 }
{ base: 5372,
  interest: 268.6,
  amortization: 5371.6366520692545,
  annuity: 5640.236652069255,
  final_value: 0 }
Другие вопросы по тегам