код уж точно не верный, как минимум возврат нескольких данных не производится через запятую, а используются для этого составные данные(массив, объект и др.)
И не думаю что здесь нужен вообще возврат
код уж точно не верный, как минимум возврат нескольких данных не производится через запятую, а используются для этого составные данные(массив, объект и др.)
И не думаю что здесь нужен вообще возврат
Видимо глаз замылился, немогу найти ошибку, в общем у меня неверно считается депозит с капитализацией.
Вот код, где тут может быть ошибка?
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 применяйте
Спасибо!
Судя по предыдущим комментариям условия в задаче немного поменялись. Кому интересны разные варианты решения -
Пожалуйста, напомните как правильно нужно вставлять код в комментарий и исправлю, использовал знак </> и не работает.
Мой код -
/*
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);
}
}
безумие какое-то. еще и работает.
вы точно не индус?
Даже не пакистанец. Я сам удивился, но работает.
странно, что вы решение предыдущей задачи сюда не прикрутили
Частично прикрепил, но в этой задаче пришлось изменить.
Предыдущая задача:
`var calculateDeposit = function (startM, interest, term, capitalized) {
var intPmonth = interest / 12 / 100;
var intSum = 0;
if (capitalized) {
for (var i = 0; i < term; i++) {
intSum = startM * intPmonth;
startM += intSum;
}
} else {
intSum = startM * intPmonth * term;
startM += intSum;
}
return Math.floor(startM);
};`
тут вся фича в том, чтобы итоговую функцию выразить через предыдущую с разными аргументами
у вас все верно, поработайте над неймингом, я то ладно, привыкший к этой задачке, у других глазки лопнут ну и сократить чутка мон
кстати выложу современное на сегодня решение
let calculateDeposit = function(deposit, percent, duration, isCapitalization) {
if (!isCapitalization) {
deposit += percent/12*duration*deposit/100;
} else {
for (let i = 0; i < duration; i++) {
deposit += percent/12/100*deposit;
}
}
return Math.floor(deposit);
}
let getProfitableDeposit = function(deposit, duration, simplePercent, complexPercent) {
let simple = calculateDeposit(deposit, simplePercent, duration, false);
let complex = calculateDeposit(deposit, complexPercent, duration, true);
let recommendedType = 'капитализацию';
let finalAmount = complex;
if (complex <= simple) {
recommendedType = 'обычный вклад';
finalAmount = simple;
}
return `Выбирай ${recommendedType}. Заработаешь ${finalAmount}`;
}
Я это понял, но в последней задаче не сработал код от предыдущей и пришлось выкручиваться. В предыдущей у меня формула расчёта капитализации немного другая.
Сейчас расшифровку сделаю.
var getProfitableDeposit = function(deposit, time, simplePercent, complexPercent) {
var rezForSimple,
rezForCapitaliz;
rezForSimple = deposit + Math.round((deposit * simplePercent * time) / 12/100);
rezForCapitaliz = Math.floor(deposit * (Math.pow(1+complexPercent/100/12, time)));
if(rezForSimple > rezForCapitaliz) {
return 'Выбирай обычный вклад. Заработаешь ' + rezForSimple;
} else {return 'Выбирай капитализацию. Заработаешь ' + rezForCapitaliz; }
}
var calculateDeposit = function (capital, percent, term, isCapital) {
var sum;
if(isCapital == false) {
sum = Math.floor((capital / 100 * (percent / 12 * term)) + capital);
}
else if(isCapital == true) {
var monthly;
for(var i = term; i > 0; i–) {
monthly = (capital / 100 * (percent / 12)) + capital;
capital = monthly;
sum = capital;
}
}
return Math.floor(sum);
};
var getProfitableDeposit = function(capital, term, procentSimple, procentCapital) {
var answer = ‘’;
var simple = calculateDeposit(capital, procentSimple, term, isCapital = false);
var complex = calculateDeposit(capital, procentCapital, term, isCapital = true);
if(simple > complex) {
answer = 'Выбирай обычный вклад. Заработаешь ’ + simple;
}
else if (complex > simple) {
answer = 'Выбирай капитализацию. Заработаешь ’ + complex;
}
return answer;
}
var calculateDeposit = function (sumatDep, stavkaYehr, srokVkl, kakoi) {
var sumPercent = 0;
if(kakoi){
for (var i = 0; i < srokVkl; i++) {
sumPercent = sumatDep * (stavkaYehr / 12 * 0.01);
sumatDep += sumPercent;
}
}else{
sumPercent += sumatDep * (stavkaYehr / 12 * srokVkl * 0.01);
sumatDep += sumPercent;
}
return Math.floor(sumatDep);
};
var getProfitableDeposit = function(sumatDep, srokVkl, stavkaYehr, procentCapital) {
var answer = ‘’;
var simple = calculateDeposit(sumatDep, stavkaYehr, srokVkl, kakoi = false);
var complex = calculateDeposit(sumatDep, procentCapital, srokVkl, kakoi = true);
if(simple > complex) {
answer = 'Выбирай обычный вклад. Заработаешь ’ + simple;
} else {
answer = 'Выбирай капитализацию. Заработаешь ’ + complex;
}
return answer;
}
true и false местами поменяйте
Как то так. Правда переделал предыдущий из задания, а то он не очень подходил
var getProfitableDeposit = function (startDeposit, timeForDeposit, persentForNormal, persentForCapitalizetion) {
//Normal
var normal = Math.floor(startDeposit + (persentForNormal / 100 / 12) * timeForDeposit * startDeposit)
//Capitalizetion
for (var i = 1, j = startDeposit; i <= timeForDeposit; i++) {
j += j * (persentForCapitalizetion / 100 / 12)
} var capitalizetion = Math.floor(j);
//Who more
if (normal > capitalizetion) { return 'Выбирай обычный вклад. Заработаешь ' + normal }
if (normal < capitalizetion) { return 'Выбирай капитализацию. Заработаешь ' + capitalizetion }
}