Javascript减法返回NaN

时间:2016-06-05 20:49:13

标签: javascript nan subtraction

我的代码出了什么问题?除减法之外的所有东西都有效。它只返回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;

}

3 个答案:

答案 0 :(得分:4)

您需要将操作分组在括号中,例如CABasicAnimation(其他人也一样)。否则,JavaScript首先运行alert("Answer: " + (x - y));,从而生成一个字符串。

另外,总是为parseInt指定基数(你想要10):"Answer: " + x,否则一些引擎会与八进制数混淆。

答案 1 :(得分:2)

你的麻烦在这里:

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

答案 2 :(得分:1)

用括号括起你的减法:(x - y)。如果你把x + y放在那里而不是z,你也会从添加中得到意想不到的结果。

发生的事情是运营商优先级。乘法和除法的优先级高于加法,因此它们首先完成 - 在隐式转换为字符串以进行连接之前。

通过减法,' +'和' - '优先级相同,所以按从左到右的顺序完成。因此concat发生在数学之前,这使得你试图从字符串中减去y(这不起作用,所以...... NaN)。

另外,它只是将两个数字连接到字符串上。