Как написать цикл для расчета сложного процента по вкладу

Рейтинг: 0Ответов: 2Опубликовано: 23.03.2023

Никак не могу понять, как написать цикл для расчета.

Пример: сумма вклада 100 000 рублей на год под 10% Срок размещения равен трем месяцам.

(100 000 * 10 * 30 / 365) / 100 - за 1 первый месяц доход = 821 р.

Доходность плюсуется к начальному вкладу.

(100 821 * 10 * 30 / 365) / 100 - за 2 первый месяц доход = 828 р.

(101 649 * 10 * 30 / 365) / 100 - за 3 первый месяц доход = 835 р.

Вот мой черновик:

function calculationINCOME(){
  let a = document.getElementById("deposit_amount1"); //сумма вклада
  let r = document.getElementById("deposit_rate"); //годовая ставка
  let t = document.getElementById("time"); //срок размещения вклада
  let d = document.getElementById("days_year"); //число дней в году
  let result = 0;
  let p = 0; //количество периодов, зависит от переменной t

  if(document.getElementsByName("capital")[0].checked){
    result = ((a.value * r.value * t.value) / d.value) / 100;
    document.getElementById("income").innerText = result.toFixed(2);
  } else {
      if(document.getElementsByName("period")[0].checked){ //период капитализации 1 месяц
        p = Math.round(t.value / 30); //при сроке = 365 p = 12
        for(i = 0; i <= p; i++)
        {
          result += ((a.value * r.value * 30) / d.value) / 100;
        }
      } else if(document.getElementsByName("period")[1].checked){ //период капитализации 1 квартал
        p = Math.round(t.value / 90); //при сроке = 365 p = 4
        for(i = 0; i < p; i++)
        {
          result += ((a.value * r.value * 30) / d.value) / 100;
        }
      } else if(document.getElementsByName("period")[2].checked){ //период капитализации 1 год
        p = Math.round(t.value / 365); //при сроке = 365 p = 1
        for(i = 0; i < p; i++)
        {
          result += ((a.value * r.value * 30) / d.value) / 100;
        }
      }
      document.getElementById("income").innerText = result.toFixed(2);
  }
}

Ответы

▲ 0Принят

Исходя из вашей специфики расчета (30 дней в месяце) можно модифицировать формулу сложных процентов, заменив делитель 12 на (365 / 30)

function calculationINCOME(summa, procent, mes) {
    return summa * Math.pow(1 + (procent / ((365 / 30) * 100)), mes);
}

let out = {};
[0, 1, 2, 3, 4, 5].forEach((m) => out[m] = (calculationINCOME(100000, 10, m)));
console.log('Вклад с процентами нарастающим итогом:');
console.log(out);
console.log('Доход по месяцам:');
Object.values(out).reduce((acc,cur)=> {
    console.log(cur-acc);
    return cur;
})

▲ 0

Ну если читать ваше ТЗ, то вроде бы так, и ничего сложно. Если я всё правильно понял.

const p = 3;
let start = 100000;
let deposit = start;
let income;
let total = 0;

for (let i = 0; i < p; i++) {
  income = (deposit * 10 * 30) / 365 / 100;
  deposit += income;
  total += income;
  console.log(income);
}

console.log(`Сумма вклада: ${start}. Общая сумма дохода: ${total.toFixed(0)}, за ${p} месяца. Итого: ${deposit.toFixed(0)}`);