Почему мои сложение и вычитание не работают? - PullRequest
0 голосов
/ 27 апреля 2018

Поэтому я использую readline-sync для выполнения базовых вычислений. Умножение и деление работают хорошо, но когда я добавляю оба числа, он просто объединяет их, а когда я вычитаю, он возвращает NaN.

Есть идеи, что я делаю не так?

Вот мой код:

var readlineSync = require("readline-sync");

var enterNum1 = readlineSync.question("Please enter your first number: ");
var enterNum2 = readlineSync.question("Please enter your second number: ");
var operations = ["add", "sub", "mul", "div"];
var selectOperation = readlineSync.keyInSelect(operations, "What operation will you like to perform?");


function addNum(num1, num2){
    console.log("The result is : " + Number(num1) + Number(num2));
}

function subNum(num1, num2){
    console.log("The result is : " + Number(num1) - Number(num2));
}

function mulNum(num1, num2){
    console.log( "The result is : " + Number(num1) * Number(num2));
}

function divNum(num1, num2){
    console.log("The result is : " + Number(num1) / Number(num2));
}

if(selectOperation === 0){
    addNum(enterNum1, enterNum2);
}else if(selectOperation === 1){
    subNum(enterNum1, enterNum2)
}else if(selectOperation === 2){
    mulNum(enterNum1, enterNum2);
}else {
    divNum(enterNum1, enterNum2);
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Это из-за порядка приоритета операторов. Интерпретатор JavaScript пытается объединить строку и первое число вместо добавления обоих чисел, а затем объединить результат со строкой.

Для смягчения необходимо указать JavaScript для выполнения сложения / вычитания перед конкатенацией строк. Скобки помогут вам сделать это:

console.log("The result is : " + (Number(num1) + Number(num2)));
console.log("The result is : " + (Number(num1) - Number(num2)));

Поскольку умножение и деление имеют более высокий приоритет перед конкатенацией строк, такого же поведения там не наблюдается.

0 голосов
/ 27 апреля 2018

Просто заключите вашу операцию в скобки

, например

console.log("The result is : " + (Number(num1) + Number(num2)));
console.log("The result is : " + (Number(num1) - Number(num2)));

Рассуждения

В соответствии с приоритетом оператора, умножение и деление работают, так как они имеют более высокий приоритет, то есть они будут выполняться первыми. В случае сложения и вычитания, приоритет тот же и работает слева направо. Следовательно, сначала строка "The result is : " добавляется к Number(num1), а затем добавляется к Number(num2), что приводит к конкатенации и вычитанию, она пытается вычесть число из строки, что приводит к NaN

Для справки, Приоритет оператора

...