这个问题在这里已有答案:
我想取一个数字输入(id =“number”)并将其保存为“x”。然后创建另一个变量“y”,即“x”的5%。然后我想将它们一起添加并将结果保存在一个名为“result”的变量中。假设x = 100.然后y = 5.如果我只是警告“y”它会提醒数字5这是正确的但问题是当我尝试警告“结果”(x + y)时它会提醒1005 (它不会添加数字只是将它们写在彼此旁边)。
let x = document.getElementById("number");
let y = x*0.05;
var result = x+y;
alert(result);
拳头得到value
,所以将其转换为number
:
变化:
var x = document.getElementById("number")
至 :
var x = parseInt( document.getElementById("number").value )
注意:即使
type
属性与number
相等,也必须将输入转换为数字。
function fun() {
var x = document.getElementById('number').value;
console.log( typeof x)
var y = parseInt(document.getElementById('number').value);
console.log( typeof y)
}
<input type="number" id="number">
<button onclick="fun()">Go..</button>
现在“+”运算符将按预期工作。
发生了什么是x+y
正在执行string concatenation,而不是整数加法 - 这就是你想要的。
// String concatenation
console.log("100" + "5"); // outputs "1005"
// Integer Addition
console.log(100 + 5); // outputs "105"
这就是问题所在,但解决方案是什么?
解决方案是force integer addition与像parseInt()
(作为Ehsan mentioned)
var x = parseInt( document.getElementById("number").value );
值得注意的是,Ehsan使用document.getElementById(“number”)。value,而不是document.getElementById(“number”)
这会强制x为int,这将允许x+y
执行整数加法。
附:我还应该注意到你的问题的部分原因与document.getElementById("number").value
是一个字符串的事实有关,迫使type conversion发生
加法'+'连接字符串几乎所有数学运算都将值转换为数字。一个值得注意的例外是加号+。如果添加的值之一是字符串,则另一个也转换为字符串。
然后,它连接(连接)它们:
alert( 1 + '2' ); // '12' (string to the right) alert( '1' + 2 ); // '12' (string to the left)
仅当至少一个参数是字符串时才会发生这种情况。否则,值将转换为数字。
这意味着其中一个操作数(同样,document.getElementById(“number”)。value是一个字符串)在一个字符串的加法操作中强制它们成为字符串并连接起来。