Помогите разобраться в вызове “Вечный вопрос”. Функция расчета взята из другого задания, она проверена и не исправлялась. Новая функция в задании в ручном тестировании тоже выдает верный ответ. Но при проверке выдает ошибку. Были загружены параметры этой проверки в ручную для вывода в консоль результатов. И как видно в скриншоте - моя функция считает верно. Я пересчитывал и калькулятором и Excel, тоже верно. Склоняюсь к мнению, что ошибка в проверке. Буду ждать ответ.
Не проходит тест с капитализацией. В тесте ошибки нет. Расчёт суммы с капитализацией в коде неверен.
Значит недостаточная проверка функции в предыдущем задании. Очень странно.
Обратите внимание, что в предыдущем задании входные параметры идут в другом порядке. Возможно, в этом проблема.
вопрос в округлении. округление в моем коде - на каждой итерации. А правильнее - округлять возвращаемое функцией значение.
Вот такое решение получилось, кстати код с предыдущего задания не совсем мой, выдалась минутка на работе решил сделать задание, а код с предыдущего задания дома, этот нарыл на форуме, хоть он был верный и проходил проверку, к этому заданию не подошел, одну проверку не проходил, пришлось менять, часть написал своего и всё получилось, ну не факт что хорошо но задачу решает:
let calculateDeposit = function (start, percent, months, isCapitalized) { let sum = 0; if (!isCapitalized) { sum = start + (start * (((percent/100) / 12) * months)); } else { sum = start + (percent/100 / 12) * start; for (let i = 1; i < months; i++) { sum += (percent / 100 / 12) * sum; } } return Math.floor(sum); }; let getProfitableDeposit = function (originalDeposit, depositPeriod, simplePercent, capitalizedPercent) { let simpleContribution = calculateDeposit(originalDeposit, simplePercent, depositPeriod, false); let capitalizedContribution = calculateDeposit(originalDeposit, capitalizedPercent, depositPeriod, true); let message = ''; if (simpleContribution > capitalizedContribution) { message = 'Выбирай обычный вклад. Получишь ' + simpleContribution; } else { message = 'Выбирай капитализацию. Получишь ' + capitalizedContribution; } return message; };
let getProfitableDeposit = function (deposit, term, perGeneral, perCapital) {
let profGeneral = deposit + Math.floor(deposit * ((perGeneral / 100) / 12) * term);
let getCapital = function () {
for (i = 1; i <= term; i ++) {
let income = deposit * ((perCapital / 100) / 12);
deposit += income;
}
return Math.floor(deposit);
}
let profCapital = getCapital();
if(profGeneral > profCapital) {
return 'Выбирай обычный вклад. Получишь ' + profGeneral;
}else {
return 'Выбирай капитализацию. Получишь ' + profCapital;
}
}
Попытался коротенько:
Код
let calculateDeposit = (sum, percent, term, cptlz) => ~~(!cptlz ? sum*(1+percent*term/1200) : sum*(1+percent*1/1200)**term);
let getProfitableDeposit = (sum, term, flatPercent, cptlPercent) => {
let flatIncome = calculateDeposit(sum,flatPercent,term,0);
let cptlIncome = calculateDeposit(sum, cptlPercent,term,1);
return flatIncome>cptlIncome ? 'Выбирай обычный вклад. Получишь ' + flatIncome : 'Выбирай капитализацию. Получишь ' + cptlIncome;
}