Как ты мне дорог․ HELP

Здравствуйте. Помогите пожалуйста
Возвращает NaN
Подскажите в чем ошибка.

var incomeTax = 18;
var contributions = 37;
var netSalary = 87000;//чистая ЗП;
var calculateExpenses = function (netSalary,incomeTax,contributions) {
  var dirtySalary = netSalary * (incomeTax/(100-incomeTax));//подсчет НДФЛ от грязной ЗП;
  dirtySalary += netSalary;//итого грязная ЗП;
  var costSalary = dirtySalary + (dirtySalary/100 * contributions);//грязная ЗП + общий размер взносов;
  return  Math.round(costSalary);
}

calculateExpenses(netSalary,incomeTax,contributions);

Получилось :))
Оказывается программа работает только с теми параметрами,которые были у меня в редакторе.
Я думал надо работать с неизвестными данными

    var incomeTax = 13;
    var contributions = 30;
    var calculateExpenses = function (netSalary) {
      var dirtySalary = netSalary * (incomeTax/(100-incomeTax));//подсчет НДФЛ от грязной ЗП;
      dirtySalary += netSalary;//итого грязная ЗП;
      var costSalary = dirtySalary + (dirtySalary/100 * contributions);//грязная ЗП + общий размер взносов;
      return  Math.round(costSalary);
    }
1 лайк

var calculateExpenses = function (netSalary) {
var dirtySalary = netSalary / (1 - (incomeTax / 100));//чистая ЗП
var otherContributions = (dirtySalary/100) * contributions;//Взносы
var total = otherContributions + dirtySalary;

return Math.round(total);
};

function calculateExpenses(netSalary) {  
  return Math.round(netSalary / (100 - incomeTax) * 100 * (contributions/100 + 1));
}
2 лайка
var incomeTax = 13;
var contributions = 30;
var calculateExpenses = function(netSalary) {
  var dirtySalary = netSalary / ((100 - incomeTax) / 100);
  return Math.round(dirtySalary + ((dirtySalary / 100) * contributions));
}

var incomeTax = 13;
var contributions = 30;

var calculateExpenses = function(netSalary){
var dirtySalary = (netSalary * 100) / (100 - incomeTax);
var tax = (dirtySalary / 100) * contributions;
return Math.round(dirtySalary + tax);
};

не обязательно вводить дополнительные переменные, в обычную формулу вставляете переменные и все:

var incomeTax = 13;
var contributions = 30;
var calculateExpenses = function(netSalary) {
  return Math.round((netSalary / (100 - incomeTax) * 100) + (netSalary / (100 - incomeTax) * 100) * contributions / 100);
}

Если уж быть кратким,то можно и так)

const calculateExpenses = (netSalary,incomeTax = 13, contributions = 30) => Math.round(netSalary / (100 - incomeTax) * 100 * (contributions/100 + 1));

Сразу видно, нет бухгалтеров в треде =)
Ну а раз я пришел, сейчас вам покажу. Для таких подсчетов обычно используют формулу:

x * (100+30,2)/ (100-13)
т.е. x * 130.2 / 87

где 87 это з/п минус подоходный, т.е. 87%, которые уйдут “на руки”
30.2 это начисления, на з/п, которые платит работодатель за работника (из которых 22% - пенсия (ПФР); 5,1% - медстрах (ОМС); 2,9% - отчисления для безработных и декретных (ФСС) и 0,2% за травматизм (ФСС)),
а х - з/п “на руки”
По условию у Кекса бизнес немного нелегальный, так что за травматизм не платит, остается 30% начислений сверх з/п до подоходного налога.

Также в формуле и в числителе и в знаменателе проценты, потому и сократим дробь на них же.
Итак, наша программа:

вот оно
var calculateExpenses = function(netSalary) {
  var total = Math.round(netSalary / (100 - incomeTax) * (100 + contributions));
  return total;
}
4 лайка

я в упор не понимаю,что это за формулы у вас такие?
dirtySalary = netSalary * (incomeTax/(100-incomeTax))
вот скажите мне: есть чистая ЗП в 70000. сколько будет от нее 13%? 13% от 70 000 = 9100,
Вычисляется несколькими путями: можно 70 000 * 0,13 или можно (70 000 * 13)/100. тоже будет 9100.
Вы же делаете следующее: 70 000*(13/(100-13))=70 000 *(13/87)=70 000 * 0,14942528…
Что это ? и самое страшное для меня,что ваше решение программа принимает. Там не должно быть никаких десятых и прочее. 13% от круглого числа - КРУГЛОЕ число. или я чего-то в жизни не понимаю)

дружище, мы не налоги считаем, а расходы на труд наемного рабочего. вы на солнышке перегрелись, выпейте смуззи и съешьте тех прекрасных французских булок.
перечитайте заодно мой коммент, выше вашего и поймете смысл, который закладывал @gagharut. на es6 у него идеальный пример решения.

Это было 5 месяцев назад,когда я только изучал js
Тут главное не решить задачу,а понять подход к задаче…
Но это придет со временем и с опытом.
Вот сколько не заставь мозгу понимать все это,все равно нужно время.
Вы поймите синтаксис и как он работает.
Тут нету формул,это просто переменные,в которых копируется значение.

Вы для начала поймите как решить задачу математически.
Потом уже поменяйте значения на переменные и решите задачу еще раз,только уже на языке javascript.
То,что в синтаксисе непонятно,листайте назад,используйте гугл и т.д.

Главное не убивайте 2 зайцев одним выстрелом.
Вы потихонечку начините и развивайте поочередно…

Я вот 3 мес. назад скинул решение уже на ES6

const calculateExpenses = (netSalary,incomeTax = 13, contributions = 30) => Math.round(netSalary / (100 - incomeTax) * 100 * (contributions/100 + 1));

Когда 6 месяцев назад еще ничего не понимал и голову ломал.
Так что не переживайте.
Нужно время,мозгу просто нужно время,чтобы реально понимать все это…

мне по сути понятны формулы и код, но именно не понятна логика. видимо бух.учет точно не мое))).

не бух. учет, а арифметика.

острожно, арифметические припадки в виде дробей

у вас есть сумма на руки.
на руки вы получаете деньги уже после налога. значит вы получаете 87% от суммы контракта.
а еще работодатель обязан доплатить взносы в размере 30% от суммы контракта (сверх, из своего кармана).

y = x / 87% ==> получаем сумму контракта, записываем в y.
y * 30% + y ==> получаем полную сумму расходов работодателя
оно же: y * (130%)
делаем подстановку: ( x / 0.87) * 130 / 100
а что такое 0.87? это (100 - incomeTax) / 100.
а что такое 130? это 100 + contributions
Итак: x / ( (100 - incomeTax) / 100 ) * (100 + contributions) / 100

итак дети, кто ходил в школу и умеет переворачивать дроби и выносить за скобку 100?
100 * x / (100 - incomeTax) * (100 + contributions) / 100. охренеть, тут умножаем на сотку и делим на сотку, непорядок:
netSalary / (100 - incomeTax) * (100 + contributions)

я кончил

3 лайка

Ребята,чем вы себе голову набивайте…
Любую формулу скачивайте из интернета и переставляя переменные работайте с ней…
Тут не требуют от вас создать программу для себя,которая удобно считала налоги ваших же работников.
Вы будете делать заказы, а не считать налоги.
Еще не поняв одну формулу вам закинут другую и заказ еще стоит,потому,что не понятно как работает эта формула…
А если вы будете работать над созданием портала кредитования?
Да там одни формулы…
На работе не будут требовать у вас знание всего и не использовать гугл.
Да пожалуйста,зайдите в гугл,посмотрите и все…

тссс, а то подписку на курсы не будут покупать =)
ну хочет человек понять логику, вот и всё тут. хочет нативный js, ща покажем. понятно что на практике только и успевай jQuery применять.

я вот реально не знаю JQuery((
сразу React изучил. Но JQuery тоже надо изучить. Старые проекты в основном на нем написаны

а сейчас есть очень жирная прослойка тех, кто оптимизирует старье, для этого и новые фреймворки надо знать и бодренького-старичка jQuery

Вот так вот получилось, жду критики.
function calculateExpences(netSalary) {
var dirtySalary = netSalary / (100 - incomeTax) * 100;
var cost = dirtySalary * (1 + contributions / 100);
return Math.round(cost);
}Текст "как есть" (без применения форматирования)

1 лайк

Моё решение:

var incomeTax = 13;
var contributions = 30;

var calculateExpenses = function (netSalary) {
    var dirtySalary = netSalary + ((netSalary / (100 - incomeTax)) * incomeTax)
    return Math.round(dirtySalary + (dirtySalary / 100 * contributions))
}