Javascript 减法 returns NaN
Javascript subtraction returns NaN
我的代码有什么问题??除了减法之外的一切都有效。它只是 returns NaN。我是 javascript 的新手,所以我的代码可能写得不好。
// Variables
var count = prompt("Choose an arithmetic method: \n1. Addition \n2. Subtraktion\n3. Multiplikation\n4. Division");
var x = parseInt(prompt("Enter your first number", "0"));
var y = parseInt(prompt("Enter your second number", "0"));
var z = +x + +y;
// Switch function with 4 cases
switch(count) {
case '1':
alert("Answer: " + z);
break;
case '2':
alert("Answer: " + x - y);
break;
case '3':
alert("Answer: " + x * y);
break;
case '4':
alert("Answer: " + x / y);
break;
}
您需要将操作分组在括号中,例如 alert("Answer: " + (x - y));
(其他操作也一样)。否则 JavaScript 首先运行 "Answer: " + x
,产生一个字符串。
此外,始终为 parseInt 指定基数(您需要 10):parseInt(input, 10)
,否则某些引擎会与八进制数混淆。
你的麻烦在这里:
alert("Answer: " + x - y);
由于运算符关联的工作方式,它的工作方式就像您这样写:
alert(("Answer: " + x) - y);
你需要这样写:
alert("Answer: " + (x - y));
这里的片段:
// Variables
var count = prompt("Choose an arithmetic method: \n1. Addition \n2. Subtraktion\n3. Multiplikation\n4. Division");
var x = parseInt(prompt("Enter your first number", "0"));
var y = parseInt(prompt("Enter your second number", "0"));
var z = +x + +y;
// Switch function with 4 cases
switch (count) {
case '1':
alert("Answer: " + z);
break;
case '2':
alert("Answer: " + (x - y));
break;
case '3':
alert("Answer: " + x * y);
break;
case '4':
alert("Answer: " + x / y);
break;
}
将减法括在括号中:(x - y)。如果你把 x + y 放在那里而不是 z,你也会从加法中得到意想不到的结果。
发生的是运算符优先级。乘法和除法的优先级高于加法,因此它们先完成 - 在隐式转换为字符串以进行连接之前。
对于减法,“+”和“-”的优先级相同,因此按从左到右的顺序进行。所以 concat 发生在数学之前,这让你试图从字符串中减去 y (这不起作用,所以...... NaN)。
加上,它会简单地将两个数字连接到字符串上。
我的代码有什么问题??除了减法之外的一切都有效。它只是 returns NaN。我是 javascript 的新手,所以我的代码可能写得不好。
// Variables
var count = prompt("Choose an arithmetic method: \n1. Addition \n2. Subtraktion\n3. Multiplikation\n4. Division");
var x = parseInt(prompt("Enter your first number", "0"));
var y = parseInt(prompt("Enter your second number", "0"));
var z = +x + +y;
// Switch function with 4 cases
switch(count) {
case '1':
alert("Answer: " + z);
break;
case '2':
alert("Answer: " + x - y);
break;
case '3':
alert("Answer: " + x * y);
break;
case '4':
alert("Answer: " + x / y);
break;
}
您需要将操作分组在括号中,例如 alert("Answer: " + (x - y));
(其他操作也一样)。否则 JavaScript 首先运行 "Answer: " + x
,产生一个字符串。
此外,始终为 parseInt 指定基数(您需要 10):parseInt(input, 10)
,否则某些引擎会与八进制数混淆。
你的麻烦在这里:
alert("Answer: " + x - y);
由于运算符关联的工作方式,它的工作方式就像您这样写:
alert(("Answer: " + x) - y);
你需要这样写:
alert("Answer: " + (x - y));
这里的片段:
// Variables
var count = prompt("Choose an arithmetic method: \n1. Addition \n2. Subtraktion\n3. Multiplikation\n4. Division");
var x = parseInt(prompt("Enter your first number", "0"));
var y = parseInt(prompt("Enter your second number", "0"));
var z = +x + +y;
// Switch function with 4 cases
switch (count) {
case '1':
alert("Answer: " + z);
break;
case '2':
alert("Answer: " + (x - y));
break;
case '3':
alert("Answer: " + x * y);
break;
case '4':
alert("Answer: " + x / y);
break;
}
将减法括在括号中:(x - y)。如果你把 x + y 放在那里而不是 z,你也会从加法中得到意想不到的结果。
发生的是运算符优先级。乘法和除法的优先级高于加法,因此它们先完成 - 在隐式转换为字符串以进行连接之前。
对于减法,“+”和“-”的优先级相同,因此按从左到右的顺序进行。所以 concat 发生在数学之前,这让你试图从字符串中减去 y (这不起作用,所以...... NaN)。
加上,它会简单地将两个数字连接到字符串上。