Вызов "Калькулятор" не работает

Что это даст?

Я пошел по пути switch):
var calculate = function(firstNumber, secondNumber,operator){
var result;
switch(operator){
case ‘+’:
result = parseInt(firstNumber)+parseInt(secondNumber);
break;
case ‘-’:
result = parseInt(firstNumber)-parseInt(secondNumber);
break;
case ‘*’:
result = parseInt(firstNumber)*parseInt(secondNumber);
break;
case ‘/’:
result = parseInt(firstNumber)/parseInt(secondNumber);
break;
}
return (result)
}

С eval можно ещё сократить:

let calculate = (firstNumber, secondNumber, operator) => eval(firstNumber + operator + secondNumber);

2 лайка

Я не уверен, но вроде у функции желательно, чтобы был один выход, тем более я сделал тоже самое просто с подстановкой переменной. На счёт символа - на калькуляторе нет букв, а почему? Просто все мы знаем как он работает, а к функции можно добавить вывод в консоль “Используйте только данные символы ‘…’, … .” На счёт дефолта - это мой просчёт, вывод в консоль был бы лучше :slight_smile:

К разработчикам курсов:
Можно ли при постановке задачи, в разделах “практика”, вставлять гиперсноски на функции и методы, которые могут быть полезны для решения? я был бы очень признателен узнать о switch заранее, до того как решил через if и пришел сюда проверять.
Про вышеупомянутые es6, let, eval страшно даже спрашивать, через сколько курсов эта инфа появится :slight_smile:
Что-то похожее было в предыдущих задачах, там где упомянута команда indexOf по отношению к строкам (с возвратом индекса подстроки), но ни слова о том, что ее можно применять еще и целиком к массивам (и получать индекс элементов).

5 лайков

По топорному, но все работает…

Калькулятор
var calculate = function (firstNumber, secondNumber, operator) {
  var result = 0;
  switch (operator) {
    case '+' : result = parseInt(firstNumber, 10) + parseInt(secondNumber, 10); break;
    case '-' : result = parseInt(firstNumber, 10) - parseInt(secondNumber, 10); break;
    case '*' : result = parseInt(firstNumber, 10) * parseInt(secondNumber, 10); break;
    case '/' : result = parseInt(firstNumber, 10) / parseInt(secondNumber, 10); break;
  }
  return result;
}

Выдает ошибку

1 лайк

Здравствуйте. Мы стараемся упоминать в вызовах полезные методы и конструкции, которые сильно упростят решение. Особенно, когда речь идёт о сложных задачах. Но мы первым делом учим программированию, в этом смысле научиться самостоятельно решать задачи такие, как сортировка, например, намного полезней, чем сразу знать про то, что есть методы sort, filter и тд. Когда вы владеете навыками программирования, для вас не проблема открыть mdn, прочитать про какой-то метод и начать его использовать. Это дело пары минут.

А про синтаксис es6 мы начнём рассказывать намного раньше, чем вы думаете. Должна быть соответствующая задача и проблема, которую мы решали способы из нового синтаксиса. Как раз в ближайших курсах мы будем об этом говорить.

1 лайк

Пришлите, пожалуйста, свой код не в скриншоте, а через сообщение. Мы выясним, почему не работает проверка

var calculate = function (firstNumber, secondNumber, operator) {
var result = 0;
firstNumber = parseInt(firstNumber, 10);
secondNumber = parseInt(secondNumber, 10);

if (operator === ‘+’) {
result = firstNumber + secondNumber;
}

if (operator === ‘-’) {
result = firstNumber - secondNumber;
}

if (operator === ‘*’) {
result = firstNumber * secondNumber;
}

if (operator === ‘/’) {
result = firstNumber / secondNumber;
}

return result;
}

2 лайка

Здравствуйте. Проверили ваш код, всё работает. На вашем скриншоте не видно, но судя по ошибке в консоли, вы проходите задание в Edge. Попробуйте другой браузер, например, Chrome. У Edge есть некоторые сложности с поддержкой JavaScript.

1 лайк

Действительно, дело в браузере, спасибо! В Chrome всё корректно работает

1 лайк

мой вариант:

result

var calculate = function(firstNumber, secondNumber,operator){
if(operator === ‘+’){
sum = parseInt(firstNumber) + parseInt(secondNumber);
} else if (operator === ‘-’){
sum = firstNumber - secondNumber;
} else if (operator === ‘*’){
sum = firstNumber * secondNumber;
} else {
sum = firstNumber / secondNumber;
}
return sum;
};

Мой ответ такой:
var calculate = function (firstNumber, secondNumber, operator) {
if (operator == ‘+’){
return parseInt(firstNumber, 10)+parseInt(secondNumber, 10);
};
if (operator == ‘-’){
return parseInt(firstNumber, 10)-parseInt(secondNumber, 10);
};
if (operator == ‘*’){
return parseInt(firstNumber, 10)*parseInt(secondNumber, 10);
};
if (operator == ‘/’){
return parseInt(firstNumber, 10)/parseInt(secondNumber, 10);
};
};

Я может придираюсь, но, нет ли смысла чуть усложнить задачу и к оператору деления добавить проверку второго числа на ноль?
Чтобы в случае если secondNumber = 0 программа выдавала какую-нибудь ошибку и предлагала ввести другие чиста.

1 лайк

Здравствуйте, отличная идея! Поправим в будущем

1 лайк

с нулем ))

var calculate = function(firstNumber, secondNumber, operator) {
    if (operator === '*') {
      return parseInt(firstNumber, 10) * parseInt(secondNumber, 10);
    };
    
    if (operator === '+') {
      return parseInt(firstNumber, 10) + parseInt(secondNumber, 10);
    };

    if (operator === '-') {
      return parseInt(firstNumber, 10) - parseInt(secondNumber, 10);
    };    

    if (operator === '/' && secondNumber !== '0') {
      return parseInt(firstNumber, 10) / parseInt(secondNumber, 10);
      } else {
        return "не делится на нуль";
      }
  }

let calculate = (firstNumber, secondNumber, operator) => {
firstNumber = +firstNumber;
secondNumber = +secondNumber;
if (operator === ‘+’) {
return (firstNumber + secondNumber);
} else if (operator === ‘-’) {
return (firstNumber - secondNumber);
} else if (operator === ‘*’) {
return (firstNumber * secondNumber);
} else if (operator === ‘/’) {
return (firstNumber / secondNumber);
}

};


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

читайте внимательнее ТЗ: Все значения приходят в виде строк
приведите операнды сначала к числам.
дело в том, что вся арифметика в js приводит строки к числам, кроме плюса.
плюс в данном случае выполняет конкатенацию строк (т.е. склеивает).
поэтому именно с плюсом надо привести к числу.
например вот так:
sum = Number(firstNumber) + Number(secondNumber);
или так:
sum = +firstNumber + +secondNumber;
или так:
sum = parseInt(firstNumber, 10) + parseInt(secondNumber, 10);

выбирайте как вам больше нравится и как лучше запомнится

2 лайка