我目前正在创建一个网站,可以帮助我快速回答物理问题。 碰巧,代码没有按预期运行,这是代码
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)
避免使用“+”符号,但我不想继续这样做。我该如何解决?
答案 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
会为您提供NaN
。 typeof 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