Всем привет! Проходит 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
вообще не нужна
Простой депозит: считаем проценты:
- Годовой процент делим на 12, чтобы получить месячный. умножаем его на месяцы.
yearPercent / 12 * months
- Столько процентов мы получим за весь срок вклада. У нас уже было 100% от депозита. к ним добавляем посчитанное.
100 + yearPercent / 12 * months
- Делим на 100, чтобы получить размерность в долях. Вот во столько раз увеличится наша сумма.
(100 + yearPercent / 12 * months) / 100
- Осталось умножить это на сумму, чтобы узнать скока получим.
startSum * (100 + yearPercent / 12 * months) / 100
- Запишем сам депозит в локальную переменную startSum (та, которая у нас параметр).
startSum = startSum * (100 + yearPercent / 12 * months) / 100
- Сократим запись
startSum *= (100 + yearPercent / 12 * months) / 100
Сложный процент: тут нужен цикл:
- Каждый месяц идет пересчет, так что цикл ограничен количеством месяцев
for (var i = 1; i <= months; i++)
ну или for (var i = 0; i < months; i++)
- Нам надо знать месячный прирост, т.е. прирост за каждый месяц: это
yearPercent / 12
(пока в процентах)
- У нас уже было 100%, к ним мы добавляем месячный прирост в процентах:
100 + yearPercent / 12
- Возвращаем размерность дроби к долям:
(100 + yearPercent / 12) / 100
- Умножаем на собственно сумму депозита и узнаем, сколько получаем в
первую итерацию нашего цикла первый месяц
startSum * (100 + yearPercent / 12) / 100
- Перезапишем значение в локальную переменную – параметр.
startSum = startSum * (100 + yearPercent / 12) / 100
- Сократим запись:
startSum *= (100 + yearPercent / 12) / 100
- Что важно, мы уже получаем в параметре новое значение, а значит можем повторно его использовать на следующей итерации.
- ???
- 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 лайк