2013-12-21 57 views
0

我选择的选项1之后和i之后添加的号码,例如100它导致这样100100不能使用+当尝试添加数

这是代码:

var userAmount; 
    var userMoney = 100; 
    var totalMoney; 
    alert("1. Add"); 
    alert("2. Subtraction"); 
    var userOption = prompt("Enter your selection: "); 
     if (userOption == 1) { 
      userAmount = prompt("Amount: "); 
      var totalMoney = userMoney + userAmount; 
      alert("Total is " + totalMoney); 
     } 
     else { 
      userAmount = prompt("Amount: "); 
      var totalMoney = userMoney - userAmount; 
      alert("Total is" + totalMoney); 
     } 
+1

'prompt'返回字符串,而不是数量 – Grundy

+1

使用'号(userAmount)' – elclanrs

回答

2

因为有一个隐含的当您使用+转换时。在你的情况下,+实际上是连接值。

函数prompt返回一个字符串,所以当你将它添加到一个int它连接的值。它将这两个值作为字符串并连接值而不是添加它。

MDN说:

字符串运算

除了比较运算符,可以在串 值一起使用,并置运算符(+)连接两个串值 一起,返回另一个字符串,它是两个 操作数字符串的并集。例如,“my”+“string”返回字符串“my string”。

你需要转换像Number(userAmount)喜欢的东西:

var totalMoney = userMoney + Number(userAmount); 

userAmount = parseFloat(prompt("Amount: ")); 

,所以你需要转换这两个数值为int使+操作表现为除了代替字符串连接。

+0

非常感谢。非常清楚 –

+0

@ Mr.AZ:欢迎来到[so]。要将解决方案标记为最适合您(提问者)的解决方案,您可以通过单击答案左侧投票箭头下方的大标记来接受答案。我强烈建议快速浏览一下[so]是什么[关于] - 这只是我们社区运行方式的快速介绍。祝你好运 - 我们能够回答你的问题真是太好了! –

2

人们常犯的错误,以新的JavaScript 他们几乎忘了从用户的输入采取一切值是字符串。在使用加法运算符+之前,您需要将它们转换为数字。这种转换可以与unary +parseFloat来完成,例如

userAmount = parseFloat(prompt("Amount: ")); 

使用字符串的JavaScript,在+运营商实际上是字符串连接

2

您需要先投你的价值观为整数。尝试使用parseInt函数()

变化:

var totalMoney = userMoney + userAmount; 

这样:

var totalMoney = parseInt(userMoney, 10) + parseInt(userAmount, 10); 
+0

您不应该需要转换userMoney - 它已经是一个数字。 – hugomg

1

这是因为用户给定数量实际上是一个字符串。

一个快速的方法来解决它的方法是键入:

var totalMoney = userMoney + userAmount * 1;