Большое спасибо!)
Видимо из-за того что раньше в ТЗ был Math.round я был уверен, что именно с ним и нужно решать.
x - сумма %, ввел просто для наглядности.
var calculateDeposit = function (startSum, percent, depositTime, isCapitalization) {
if (!isCapitalization) {
var depositSum = (percent / 100 / 12) * depositTime * startSum + startSum;
} else {
for (var i = 0; i < depositTime; i++) {
depositSum = startSum += (percent / 100 / 12) * startSum;
}
}
return Math.floor(depositSum);
};
Мой вариант:
Код
var calculateDeposit = function (sum, percent, period, isCapital) {
if (isCapital) {
for (var i = 0; i < period; i++) {
sum += sum * (percent/1200);
}
}
else {
sum += sum * ((percent/1200) * period);
}
return Math.floor(sum);
};
Мой код в 2 строчки без циклов (извините, не разобралась, как красиво вставить код)
Сводка
`
var calculateDeposit = function (cash0, rate, period, ifCapitalize) {
var cash1 = cash0 * (1 + (rate / 100) / 12 * period);
if(ifCapitalize) {
cash1 = cash0 * ((1 + (rate / 100) / 12) ** period);
}
return Math.floor(cash1);
};`
Делюсь своим решением:
let calculateDeposit = (sm,pg,sr,f)=> {
let pm = (pg/12)/100; // процент за месяц, от 1
let pp = (a) =>(a=sm*(pm*sr+1),Math.floor(a));// без капитализации
let cp = () =>(sm*=(1+pm),Math.floor(sm)); // с капитализацией 1 месяц
return (!f)?pp():Array(sr).fill().reduce(a=>a=cp(),0);
};
скрывать не умею, вставлю пока так, мое решение, вдруг кому-нибудь будет полезно
var calculateDeposit = function (startSum, percent, period, isCapital) {
var sumDeposit = startSum;
if (isCapital) {
for (var i = 0; i < period; i++) {
sumDeposit += Math.floor((percent / 12 * 0.01) * sumDeposit);
}
} else {
sumDeposit = startSum + (percent / 12 * period * 0.01) * startSum;
}
return Math.floor(sumDeposit);
};
Что бы скрывать надо сначала нажать на опции (шестеренка) и выбрать пункт скрыть детали, дальше думаю разберешься
Как прятать то?
Это-ж гениально! но каким образом программа сeммирует dep при условии isK? Вообще не ясно. Обычно перед if мы ставили какую-то новую переменную, с нулевым значением, что бы потом в неё суммировалось. А у вас этого вообще нету, и всё работает!
ну нам надо найти увеличенную входную переменную, почему бы ее напрямую не увеличить без буфера и не засоряя память? вроде ж логично
Отличное решение, только в конце не round a floor
var calculateDeposit = function (oneSum, percentEars,timeСontribution,
capitalization) {
var continSum;
var percent;
var plain;
if (capitalization == false) {
percent = (percentEars / 12) * timeСontribution;
plain = oneSum * (percent / 100);
continSum = Math.floor(plain + oneSum);
}else{
percent = (percentEars / 12);
for (var i = 1; i <= timeСontribution; i++) {
plain = oneSum * (percent / 100);
var twoSum = plain + oneSum;
plain = twoSum * (percent / 100);
oneSum = twoSum;
}
continSum = Math.floor(twoSum);
}
return continSum;
};
var calculateDeposit = function (sumDeposit, percent, term, isCapitalize) {
if (isCapitalize) {
for (var i = 0; i < term; i++) {
sumDeposit += sumDeposit * percent / 12 * 0.01;
}
} else {
sumDeposit += sumDeposit * percent / 12 * term * 0.01;
}
return Math.floor(sumDeposit);
};
Получилось вот так в результате:
Сводка
var calculateDeposit = function (amount, rate, term, isСapitalize) {
var totalSum = amount + ((rate * 0.01 / 12) * term * amount);
if (isСapitalize) {
for (var i = 0; i < term; i++) {
amount += ((rate * 0.01 / 12) * amount);
totalSum = amount;
}
}
return (Math.floor(totalSum));
};
Отдельное спасибо @Hierumo и @Ineska за внятные пояснения)).
[ РЕШЕНО ] Спасибо @Hierumo и @Ineska
Не проходит 4-ю проверку.
Пробовал 3 готовых кода с форума, результат тот же!
Помогите разобраться…
Сводка
let calculateDeposit = function (depositSum,percentYear,month,isCapitalize) {
let bonus = 0
let percentMonth = percentYear / 12 / 100
if (isCapitalize === false) {
bonus = depositSum * (percentMonth * month)
} else if (isCapitalize === true) {
bonus = depositSum * percentMonth
for (let i = 1; i < month; i++) {
bonus += bonus * percentMonth
}
}
return Math.floor(depositSum + bonus)
};
Сводка
let calculateDeposit = function (sum, percent, term, isPlowBack) {
if (isPlowBack) {
for (let i = 0; i < term; i++) {
sum += sum * (percent / 12 * term) / 100 / term
}
} else {
sum += sum * (percent / 12 * term) / 100
}
return Math.floor(sum)
}
Гугл подкинул банковских формул
Сводка
let calculateDeposit = function (deposit, percent, month, isCapitalise) {
let money;
if (!isCapitalise) {
money = (percent / 100 / 12) * month * deposit + deposit;
} else {
money = deposit * (1 + percent / 100 / 12) ** month;
}
return Math.floor(money);
};
Не очень аккуратно, но проверку проходит.
function calculateDeposit (a, b, c, d) {
let total;
let per = (a / 100) * (b / 12);
if (d) {
for (let i = 0; i < c; i++) {
let perc = a * (b / 12 * 0.01);
a += perc;
}
} else {
a = (per * c) + a;
}
total = Math.floor(a)
return total;
};