Javascript - 奇怪的数学输出

时间:2015-04-27 07:22:25

标签: javascript math

这是我的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。那是为什么?

2 个答案:

答案 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;
&#13;
&#13;