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

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

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;
};

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

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

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

Summary

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

Вот скрин:

Summary

1 лайк

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

1 лайк

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

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

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

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

1 лайк

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

1 лайк

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

const calculateSalary = money => money >= 100000 ? money * 0.55 : money * 0.65
2 лайка
Summary
var calculateSalary = function (dirtySalary) {
  return dirtySalary <= 100000 ? dirtySalary * (1 - 35 / 100) : dirtySalary * (1 - 45 / 100);
};

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

Summary

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

2 лайка

Пока без всяких сокращений, топорно по аналогии с теорией :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;
};
1 лайк

мои 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. почему-то форматирование не получилось, изивините.

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

моё рабочее
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?

1 лайк

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

2 лайка

В техзадании могли бы и подсказать, как правильно называть переменные с зарплатой. А то я через гугл-переводчика получил “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;

Подскажите пожалуйста, что не так?
У меня не проходит ( Результат функции calculateSalary равен 65000 и не совпадает с ожидаемым значением

Грязная зарплата 120000 рублей, ожидаю чистую зарплату 66000 рублей.)

var calculateSalary = function (dirtySalary) {
var salary;
if(dirtySalary <= 100000) {
salary = dirtySalary * 0.65;
}else{
salary = dirtySalary * 0.55;
}
return Math.round(salary);
};

if (dirtySalary <= 100000)
тут ошибка

Спойлер на случай если не разберетесь

уберите равно

1 лайк
var calculateSalary = function (money) {
var cleanMoney = 0;
    if (money >= 100000) {
    cleanMoney = Math.round(money * 0.55);
    return cleanMoney;
    } else {
      cleanMoney = Math.round(money * 0.65);
      return cleanMoney;
      }
};
1 лайк