Испытание: От зарплаты до зарплаты


#1

Делается полностью по аналогии с обучающими курсами:

Code

var calculateSalary = function (blackSalary) {
var percent = 0.35
if (blackSalary >= 100000) {
percent = 0.45;
}
var tax = percent * blackSalary;
var whiteSalary = blackSalary - tax;
return whiteSalary;
};


#3
вот так тоже прошло

var calculateSalary = function (Zp) {
var lapaZp = Zp - Zp0.35;
if (Zp >= 100000) { lapaZp = Zp - Zp
0.45 };
return lapaZp;
};


#4

Мне интересно, почему у меня программа прошла проверку без объявления переменной в теле функции:

Summary

var calculateSalary = function (blackZp) {
whiteZp=blackZp - blackZp0.35;
if (blackZp>=100000) {
whiteZp=blackZp - blackZp
0.45;
}
return whiteZp;
};

Вот скрин:

Summary


#5

@juwain, это :point_up: к вам.
+ Медиана на чётном количестве элементов


#6

Отправил разработчикам, разберёмся, спасибо.


#7

Смотрите, вы не объявили переменную внутри функции, поэтому whiteZp стала глобальной переменной, которая даже после работы функции останется в объекте window. Так делать плохо, но на работоспособности функции это не сказывается. В данной задаче важнее логика решения и то, что из функции возвращается.
Но мы рассмотрим этот случай и, возможно, внесём изменения в проверки.


#8

Это в любом случае будет Reference Error, потому что на стадии компиляции движок не видит никакой переменной whiteZp ни к глобальной области видимости, ни в лексической.


#9

да, так и будет, если вы работаете в режиме ‘use strict’


#10

var calculateSalary = function (dirtySalary) {
if (dirtySalary>=100000) {
tax=0.45;
} else {
tax=0.35;
}
clearSalary=dirtySalary*(1-tax);
return clearSalary;
};


#11

когда углубился в js и решил максимально сократить код, хотя читаемость лучше когда полная запись, а не сокращенная

const calculateSalary = money => money >= 100000 ? money * 0.55 : money * 0.65

#12
Summary
var calculateSalary = function (dirtySalary) {
  return dirtySalary <= 100000 ? dirtySalary * (1 - 35 / 100) : dirtySalary * (1 - 45 / 100);
};

#13

Ну раз сокращать, то тогда уже можно и так :grinning::

Summary

const calculateSalary = money => money * (money >= 100000 ? 0.55 : 0.65);


#14

Пока без всяких сокращений, топорно по аналогии с теорией :face_with_raised_eyebrow:

От зарплаты до зарплаты
var calculateSalary = function (blackPay) {
  var taxes = 0.35;
  if (blackPay >= 100000) {
    taxes = 0.45;
  }
  var whitePay = blackPay - blackPay * taxes;
  return whitePay;
};

#15

мои 5 копеек

var calculateSalary = function (salaryBeforeTax) {

if (salaryBeforeTax >= 100000) {

var taxes = 0.45;

} else {
  
taxes = 0.35;

}

  var taxesInMoney = salaryBeforeTax * taxes;

  var salaryAfterTaxes = salaryBeforeTax - taxesInMoney;

  return salaryAfterTaxes`

};

calculateSalary(40000);

P.S. почему-то форматирование не получилось, изивините.


#16

внесу лепту на форум =)

моё рабочее
var calculateSalary = function (zarplata) {
  if (zarplata < 100000 && zarplata >= 0) {
    var sum = zarplata*(1-35/100);
  }
  if (zarplata >= 100000) {
    var sum = zarplata*(1-45/100);
  }
  return Math.round(sum);
};

Объясните плиз, как вылезает нанокопейка при перемножении 100000 * 0.55?
это особенности JS?


#17

https://learn.javascript.ru/number#netochnye-vychisleniya


#18

В техзадании могли бы и подсказать, как правильно называть переменные с зарплатой. А то я через гугл-переводчика получил “dirty salary” и “net salary” :slight_smile: . А остальное - плёвое дело.

var calculateSalary = function (blackSalary) {
if (blackSalary >= 100000) {
var whiteSalary = Math.round (blackSalary * 0.55);
}else{
whiteSalary = Math.round (blackSalary * 0.65);
}
return whiteSalary;
}