var calculateDeposit = function (initialdeposit, annualpercent, investperiod, capitalize) {
if (capitalize) {
for (var i=0; i<=investperiod; i = i + 1) {
var currentdeposit = initialdeposit;
percent = (annualpercent*0.01/12)*currentdeposit;
initialdeposit += percent;
};
return Math.round(currentdeposit);}
При расчете депозита без капитализации сумма процентов каждый месяц не меняется. Поэтому вы умножаете сумму процентов на количество месяцев ( у меня это term).
При расчете депозита с капитализацией ситуация другая. Сумма процентов каждый месяц отличается. И умножать на число месяцев уже нельзя. И поэтому используется цикл, только чтобы суммировать полученные проценты.
Я правильно понял, что выражение
sumPercent = sumDeposit * (percent / 12 * 0.01); - это расчет процентов за каждый месяц в случае с депозитом по капитализации?
А цикл нам нужен для того, чтобы расчеты выполнялись пока переменная “i” не достигнет значения параметра “term”?
var calculateDeposit = function (deposit, percent, period, isCapitalized) {
var profit = deposit / 100 * percent / 12 * period;
var result = deposit + profit;
if (isCapitalized) {
result = deposit;
for (var i = 0; i < period; i++) {
profit = result / 100 * percent / 12;
result += profit;
}
}
return Math.round(result);
};
Никто не подскажет, где ж у меня закралась ошибка, что одно из 6 заданий (Результат работы функции calculateDeposit равный 101667 не совпадает с ожидаемым значением 101674) не выполняется…
var calculateDeposit = function (startDeposit, procent, period, capitalProcent) {
procent = procent / 100;
var advantage;
if (capitalProcent === false) {
advantage = ((procent / 12) * period * startDeposit) + startDeposit;
} else {
advantage = startDeposit + (procent / 12) * startDeposit;
for (var i = 1; i < period; i++) {
advantage = advantage + (procent / 12) * startDeposit;
}
}
return Math.round(advantage);
};
var calculateDeposit = function (
initialContribution, procents,
term, capitalization) {
var total = 0;
if(capitalization) {
for (var i = 1; i <= term; i++) {
total = Math.round(initialContribution + ((procents/100)/12)initialContribution);
initialContribution = total;
}
} else {
total = Math.ceil(initialContribution + (initialContribution((procents/12)*term)/100));
}
return total;
};
Проходит все проверки кроме одной, а именно: "Начальная сумма: 100000 рублей, годовой процент: 10%, вклад на 2 мес., с капитализацией, ожидаемый результат: 101674 рублей.
Результат работы функции calculateDeposit равный 101673 не совпадает с ожидаемым значением 101674."
Явно проблема в округлении, пробовал округлять через ceil и floor, такая же ерунда, только в одном случае получается на единицу больше… В чем проблема может быть? как это решить?
var calculateDeposit = function (startingSum, percent, termOfdeposit, isСapitalization) {
if (!isСapitalization) {
startingSum += (startingSum * percent / 100 * termOfdeposit / 12);
return Math.round(startingSum);
}
for (i = 0; i < termOfdeposit; i++) {
startingSum += startingSum * percent / 100 / 12;
}
return Math.round(startingSum);
}
У меня вопрос к автору (или авторам) курса. Почему вы в заданиях в первую очередь предлагаете использовать не объявления функций, а функциональные выражения?