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


#1

Всем привет! Проходит 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);

};`


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

у вас формула неправильная
переменная 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);  
}

#3

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