Помогите разобраться в вызове “Вечный вопрос”. Функция расчета взята из другого задания, она проверена и не исправлялась. Новая функция в задании в ручном тестировании тоже выдает верный ответ. Но при проверке выдает ошибку. Были загружены параметры этой проверки в ручную для вывода в консоль результатов. И как видно в скриншоте - моя функция считает верно. Я пересчитывал и калькулятором и 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;
}

