这是我的JavaScript:
function straava() {
var input = document.getElementById('input').value
var r1 = document.getElementById('r1').value
var r2 = document.getElementById('r2').value
document.getElementById("output").innerHTML = r2 / (r1 + r2) * input;
}
给定值:
input = 5
r1 = 1000
r2 = 1000
预期输出为2.5
,但此函数会生成0.0004999500049995
。那是为什么?
答案 0 :(得分:4)
您的变量是字符串。所以这是发生的事情:
"1000" / ("1000" + "1000") * "5";
"1000" / "10001000" * "5";
// 0.0004999500049995
+
(加法)运算符连接字符串而不是添加字符串,因此结果不正确。
转换您的"数字"到数字;使用parseInt
/ parseFloat
函数,(一元)+
运算符或Number
函数:
var input = parseInt(document.getElementById('input').value, 10);
var r1 = parseInt(document.getElementById('r1').value, 10);
var r2 = parseInt(document.getElementById('r2').value, 10);
答案 1 :(得分:1)
您没有将值解析为数字,因此它会对字符串进行计算。这是因为通过使用.value
获取元素值将返回 string 类型。
function straava() {
var input = parseInt(document.getElementById('input').value);
var r1 = parseInt(document.getElementById('r1').value);
var r2 = parseInt(document.getElementById('r2').value);
document.getElementById("output").innerHTML = r2 / (r1 + r2) * input;
}
以下是使用字符串和整数的不同输出的示例。
function straava(p1, p2, p3) {
var input = p1 //document.getElementById('input').value
var r1 = p2 //document.getElementById('r1').value
var r2 = p3 //document.getElementById('r2').value
return (r2 / (r1 + r2) * input);
}
document.getElementById('output1').innerHTML = straava('5','1000','1000');
document.getElementById('output2').innerHTML = straava(5,1000,1000);

Using strings as parameters: <span id="output1"></span><br/>
Using integers as parameters: <span id="output2"></span>
&#13;