Javascript:“+”符号连接而不是给出变量的总和

时间:2016-05-06 09:21:55

标签: javascript variables sum concatenation

我目前正在创建一个网站,可以帮助我快速回答物理问题。 碰巧,代码没有按预期运行,这是代码

if (option == "dv") {
    var Vinitial = prompt("What is the Velocity Initial?")
    var acceleration = prompt("what is the acceleration?")
    var time = prompt("what is the time?")

    Vfinal = Vinitial + acceleration * time

    displayV.innerHTML = "v= vf= " + Vfinal + "ms" + sup1.sup();
}

现在,让我们说Vinitial是9,加速是2,时间是3。 当代码运行时,我获得96而不是15为“Vfinal”。 我发现它将加速度和时间精确加倍,然后将开头的9连接起来,加上6(2 * 3的乘积)。

我现在已经使用

修复了它
Vfinal =  acceleration * time - (-Vinitial)

避免使用“+”符号,但我不想继续这样做。我该如何解决?

4 个答案:

答案 0 :(得分:4)

你在这里处理strings,对字符串的数学运算会搞乱。记住当您进行数学运算时,您必须将数据转换为实际数字,然后执行数学

使用 parseInt() more Details here

您的代码应更改为

Vfinal = parseInt(Vinitial,10) + parseInt(acceleration,10) * parseInt(time,10);

编辑1:如果数字小数值,请改用 parseFloat()

所以代码是

Vfinal = parseFloat(Vinitial) + parseFloat(acceleration) * parseFloat(time);

答案 1 :(得分:1)

  

Object-Oriented JavaScript - Second Edition :正如您所知,当您使用带有两个数字的加号时,   是算术加法运算。但是,如果你使用加号   用字符串签名,这是一个字符串连接操作,它   返回粘在一起的两个字符串:

var s1 = "web";
var s2 = "site";
s1 + s2; // website
     

+运算符的双重目的是错误的来源。因此,   如果你打算连接字符串,最好确保它   所有的操作数都是字符串。这同样适用于添加;   如果您打算添加数字,请确保操作数是数字

您可以使用带有prompt()的“+”运算符将返回值从字符串转换为int

var Vinitial = +prompt("What is the Velocity Initial?");
var acceleration = +prompt("what is the acceleration?");
var time = +prompt("what is the time?");

<强>解释

var a = prompt('Enter a digit'); 
typeof a; // "string"
typeof +a; // "number"

如果您输入非数字数据,+a会为您提供NaNtypeof NaN也是"number":)

parseInt()将获得相同的结果:

var Vinitial = parseInt(prompt("What is the Velocity Initial?"), 10);
var acceleration = parseInt(prompt("what is the acceleration?"), 10);
var time = parseInt(prompt("what is the time?"), 10);
  

developer.mozilla.org parseInt(字符串,基数);

     
      
  • 字符串:要解析的值。

  •   
  • radix :2到36之间的整数,表示上述字符串的基数(数学数字系统中的基数)。   为人类常用的十进制数字系统指定10。   始终指定此参数以消除读者的困惑和   保证可预测的行为。产生不同的实现   未指定基数时的不同结果,通常是默认值   值为10.

  •   

<强>尾声:

  

Object-Oriented JavaScript - Second Edition :最安全的做法是始终指定基数。如果省略基数,则代码   可能仍会在99%的情况下工作(因为最常见的情况   你解析小数),但每隔一段时间它可能会导致你   在调试一些边缘情况时有点脱发。例如,想象一下   你有一个表单字段,接受日历日或月和   用户类型06或08。

结语II:

  

ECMAScript 5删除八进制文字值并避免混淆   使用parseInt()和未指定的基数。

答案 2 :(得分:0)

问题是,你的值已经以字符串的形式获取..所以使用 parseInt(加速)将你的值转换为Int ..然后它会工作..

Vfinal = parseInt(Vinitial) + parseInt(acceleration) * parseInt(time)

答案 3 :(得分:-2)

//use ParseInt
var a=10,b=10;
var sum=parseInt(a+b);

例如:

parseInt(Vinitial + acceleration) * time