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


#1

Подскажите, где я ошибся в коде?
var calculateDeposit = function (startDeposite, percent, months, capitalizase) {
if (!capitalizase) {
var generalPercent = (percent / 100 / 12) * months * startDeposite;
return Math.floor(startDeposite + generalPercent);
}
var summAfterFirstMonth = startDeposite;
if (capitalizase) {
for (var i = 0; i < months; i++) {
summAfterFirstMonth = summAfterFirstMonth + (percent / 100 / 12) * startDeposite;
return Math.floor(summAfterFirstMonth);
}}
};

Проходит все проверки, кроме предпоследней :
Результат работы функции calculateDeposit равный 100833 не совпадает с ожидаемым значением 101673 .


#2

#3

Ого, не видел темы, спасибо! А не подскажите почему тогда, раз код неверный, но почти все проверки он успешно проходит?


#4

без капитализации формула правильная (точнее 2 части формулы, вы её на 2 разбили выходит, одна половина в условии, вторая в возврате значения). лаконичнее просто не заводить новую переменную для вывода результата, потому я предлагаю переписать имеющуюся.

  1. generalPercent = (percent / 100 / 12) * months * startDeposite; и Math.floor(startDeposite + generalPercent);
  2. сокращаем: (percent / 100 / 12) * months * startDeposite + startDeposite
  3. startDeposite за скобки:
    startDeposite * ((percent / 100 / 12) * months + 1)
  4. 100 за скобки:
    startDeposite * (percent / 12 * months + 100) / 100 - вот она рыба моей мечты моя формула

во второй формуле вы каждый раз возвращаетесь к startDeposite, а должны к новой переменной. в итоге запутались, потому я и предлагаю всегда перезаписывать

проверки:

  1. без капитализации - верно
  2. с капитализацией, но 1 итерация - тоже верно
  3. без капитализации - верно.
  4. с капитализацией - 2 итерации - неверно
  5. без капитализации - верно.
  6. процент = 0, так что в любом случае какую бы примерно “правильную” формулу не награмоздили, выйдет стартовый депозит. проверка тупо на равенство входящему значению. можно было бы написать тупо result = startDeposit; - тоже бы прошло =)

#5

var calculateDeposit = function (firstSum, percents, monthAmount, capitalized) {
if (!capitalized){
var perMonth = percents / 12 * monthAmount;
return Math.floor(firstSum += firstSum / 100 * perMonth);
} else {
var perMonth = percents / 12;
for (var i = 0; i < monthAmount; i++){
firstSum += firstSum / 100 * perMonth;
}
return Math.floor(firstSum);
}
};

Все работает))