Сделайте вызов функции в консоль в конце и все заработает
console.log(calculateDeposit(initialAmount, duration, simplePercent, complexPercent));
Спасибо!
подскажите логику - а зачем выводить это в консоль?
Спасибо.
В консоль не обязательно, нужно вызов функции произвести…
Считая уже сумму вкладов, как программа заменяет данные при выполнении функции(расчет процентов)?Я никак не могу понять этого, поэтому и не смогла выполнить задание((
Данные в функцию обычно передаются через параметры при вызове ф-ии, либо ф-ия замыкает внешнее окружение при определение(читайте про замыкание)
Код текстом, пожалуйста. Кнопка для форматирования </> в редакторе сообщений.
Ваш код не верный, хотя бы потому что сумма не совпадает, и она не округляется, если заметили.
код уж точно не верный, как минимум возврат нескольких данных не производится через запятую, а используются для этого составные данные(массив, объект и др.)
И не думаю что здесь нужен вообще возврат
Видимо глаз замылился, немогу найти ошибку, в общем у меня неверно считается депозит с капитализацией.
Вот код, где тут может быть ошибка?
var initialAmount = 250000;
var depositDuration = 14;
var simplePercent = 7;
var complexPercent = 6.8;
var simpleDeposit = simplePercent / 1200 * depositDuration * initialAmount + initialAmount;
var complexDeposit = initialAmount;
for (var i = 1; i <= depositDuration; i++) {
complexDeposit += complexPercent / 1200 * complexDeposit;
}
if ( simpleDeposit > complexDeposit) {
var recommendedType = 'simple';
var finalAmount = Math.round(simpleDeposit);
} else {
var recommendedType = 'complex';
var finalAmount = Math.round(complexDeposit);
}
UPD: Ошибку сам нашел в цикле была неверная формула:
complexDeposit += complexPercent / 1200 * initialAmount;
а должно быть:
complexDeposit += complexPercent / 1200 * complexDeposit;
Мой топорный вариант, нужны комментарии
Вечный вопрос
var initialAmount = 50000;
var depositDuration = 12;
var simplePercent = 7;
var complexPercent = 6;
var recommendedType = '';
var finalAmount = 0;
var calculateDeposit = function (initialAmount, percent, depositDuration, isCapitalization) {
var totalAmount = initialAmount;
if (isCapitalization) {
for (var i = 0; i < depositDuration; i++) {
totalAmount += totalAmount * (percent / 100 / 12);
}
}else {
totalAmount += totalAmount * (percent / 100 / 12 * depositDuration);
}
return Math.round(totalAmount);
}
var simpleAmount = calculateDeposit(initialAmount, simplePercent, depositDuration, false);
var complexAmount= calculateDeposit(initialAmount, complexPercent, depositDuration, true);
if (simpleAmount > complexAmount) {
recommendedType = 'simple';
finalAmount = simpleAmount;
}else {
recommendedType = 'complex';
finalAmount = complexAmount;
}
Тож отпишусь
моё рабочее
var initialAmount = 50000;
var depositDuration = 12;
var simplePercent = 7;
var complexPercent = 6;
var recommendedType;
var finalAmount;
var calculateDeposit = function(deposit, percent, duration, isCapitalization) {
if (!isCapitalization) {
deposit *= (100+percent/12*duration)/100;
} else {
for (var i = 0; i < duration; i++) {
deposit *= (100+percent/12)/100;
}
}
return Math.round(deposit);
}
var simple = calculateDeposit(initialAmount, simplePercent, depositDuration, false);
var complex = calculateDeposit(initialAmount, complexPercent, depositDuration, true)
if (complex <= simple) {
recommendedType = 'simple';
finalAmount = simple;
} else {
recommendedType = 'complex';
finalAmount = complex;
}
Обратите внимание, в функцию пишем параметры, а в сравнении уже переменные, которые принимают значение аргументов, чтобы было понятнее как делать. Также заметьте, значение “флага” капитализации не передается пользователем, оно автоматом подцепается из вызова функции в зависимости какой процент используется.
Как я понял задачу немного доработали и изменили…
Не проходит 1 проверку из 3.
По причине, как я понимаю, неверного округления в функции из предыдущего задания.
Вопрос уже задавал ранее: http://forum.academy/t/ispytanie-dengi-k-dengam/8382/61
Код
var calculateDeposit = function (dep, pr, per, isK) {
var x = 0;
if (!isK) {
x = (pr / 100 / 12) * per * dep;
}
if (isK) {
for (var i = 1; i <= per; i++) {
x += (pr / 100 / 12) * (dep + x)
}
}
return Math.round(x + dep);
};
var getProfitableDeposit = function (dep, per, prS, prK) {
var zz = '';
var xx = calculateDeposit(dep, prS, per, false);
var yy = calculateDeposit(dep, prK, per, true);
if (xx > yy) {
zz = 'Выбирай обычный вклад. Заработаешь ' + xx;
} else {
zz = 'Выбирай капитализацию. Заработаешь ' + yy;
}
return zz;
};
Угу, Math.floor применяйте
Спасибо!
Судя по предыдущим комментариям условия в задаче немного поменялись. Кому интересны разные варианты решения -
Пожалуйста, напомните как правильно нужно вставлять код в комментарий и исправлю, использовал знак </> и не работает.
Мой код -
Сводка
/*
- startM - исходный размер депозита
- term - срок депозита в месяцах
- simpleInt - процентная ставка для депозита с простыми процентами
- capitalInt - процентная ставка для депозита с капитализацией процентов
*/
var getProfitableDeposit = function (startM, term, simpleInt, capitalInt) {
var intPmonthS = simpleInt / 12 / 100;
var intPmonthC = capitalInt / 12 / 100;
var endMS = startM + ((startM * intPmonthS) * term);
var endMC1 = startM;
for (var j = 0;j < term;j++) {
var endMC2 = endMC1 + intPmonthC * endMC1;
endMC1 = endMC2;
}
if (endMS > endMC1) {
return 'Выбирай обычный вклад. Заработаешь ' + Math.floor(endMS);
} else {return 'Выбирай капитализацию. Заработаешь ' + Math.floor(endMC1);
}
}
безумие какое-то. еще и работает.
вы точно не индус?
Даже не пакистанец. Я сам удивился, но работает.
странно, что вы решение предыдущей задачи сюда не прикрутили