Деньги к деньгам

Всем привет! Проходит 5 проверок из 6. Подскажите, где ошибка.

`var calculateDeposit = function (startSum, yearPercent, months, isInterestCapitalization) {

var total = startSum;

if (!isInterestCapitalization) {

total += startSum*(yearPercent/12/100)*months;

} else {

for (var i=0; i<months; i++) {

total += startSum*(yearPercent/12/100);

}

}

return Math.floor(total);

};`

у вас формула неправильная
переменная total вообще не нужна

Простой депозит: считаем проценты:

  1. Годовой процент делим на 12, чтобы получить месячный. умножаем его на месяцы.
    yearPercent / 12 * months
  2. Столько процентов мы получим за весь срок вклада. У нас уже было 100% от депозита. к ним добавляем посчитанное.
    100 + yearPercent / 12 * months
  3. Делим на 100, чтобы получить размерность в долях. Вот во столько раз увеличится наша сумма.
    (100 + yearPercent / 12 * months) / 100
  4. Осталось умножить это на сумму, чтобы узнать скока получим.
    startSum * (100 + yearPercent / 12 * months) / 100
  5. Запишем сам депозит в локальную переменную startSum (та, которая у нас параметр).
    startSum = startSum * (100 + yearPercent / 12 * months) / 100
  6. Сократим запись
    startSum *= (100 + yearPercent / 12 * months) / 100

Сложный процент: тут нужен цикл:

  1. Каждый месяц идет пересчет, так что цикл ограничен количеством месяцев
    for (var i = 1; i <= months; i++) ну или for (var i = 0; i < months; i++)
  2. Нам надо знать месячный прирост, т.е. прирост за каждый месяц: это yearPercent / 12 (пока в процентах)
  3. У нас уже было 100%, к ним мы добавляем месячный прирост в процентах: 100 + yearPercent / 12
  4. Возвращаем размерность дроби к долям: (100 + yearPercent / 12) / 100
  5. Умножаем на собственно сумму депозита и узнаем, сколько получаем в первую итерацию нашего цикла первый месяц
    startSum * (100 + yearPercent / 12) / 100
  6. Перезапишем значение в локальную переменную – параметр.
    startSum = startSum * (100 + yearPercent / 12) / 100
  7. Сократим запись:
    startSum *= (100 + yearPercent / 12) / 100
  8. Что важно, мы уже получаем в параметре новое значение, а значит можем повторно его использовать на следующей итерации.
  9. ???
  10. PROFIT!

ну а дальше вы сами знаете как вернуть из функции округленное вниз значение =)

Вот моё
var calculateDeposit = function(deposit, percent, duration, isCapitalization) {
  if (!isCapitalization) {
    deposit *= (100+percent/12*duration)/100; 
  } else {
      for (var i = 1; i <= duration; i++) {
        deposit *= (100+percent/12)/100;
      }
    }
  return Math.floor(deposit);  
}
1 лайк

Спасибо за помощь! :pray:

Сводка

const culculatePercent = percent => percent / 12 / 100;

const calculateDeposit = (deposit, percent, months, isCapitalized) => {
  const percentYear = culculatePercent(percent)

  if (isCapitalized) {
    let capDeposit = deposit;
    let sumPercent = 0;
    for (let i = months; i > 0; i--) {
      capDeposit += percentYear * capDeposit;
    }

    return Math.floor(capDeposit);
  }
  
  return Math.floor(percentYear * months * deposit + deposit);
};