Ken*_*hvr 14 javascript sum function
如果我有这个小功能:
<script type="text/javascript">
function printFloat(){
var myFloatNumber1 = document.getElementById('floatNumber1');
var myFloatNumber2 = document.getElementById('floatNumber2');
alert(parseFloat(myFloatNumber1.value) + parseFloat(myFloatNumber2.value))
}
</script>
<input type="text" id="floatNumber1"></input>
<input type="text" id="floatNumber2"></input>
<input type="button" onclick="printFloat()"/>
Run Code Online (Sandbox Code Playgroud)
在字段1中我输入:字段2中的221.58我输入:2497.74
我希望输入字段中的2个数字之和为2个数字:2719.32但结果是错误的数字...:2719.3199999999997
一轮将完成这项工作,但我只是不明白为什么代码在这个数字上做了...在其他数字组合,总和是正确的...
Mic*_*rdt 20
来自浮点指南:
为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而是我得到一个奇怪的结果,如0.30000000000000004?
因为在内部,计算机使用的格式(二进制浮点)无法准确地表示0.1,0.2或0.3之类的数字.
编译或解释代码时,"0.1"已经四舍五入到该格式中最接近的数字,即使在计算发生之前也会导致小的舍入误差.
在您的情况下,当您输入的值被转换时,会发生舍入错误parseFloat()
.
为什么其他计算如0.1 + 0.4正常工作?
在这种情况下,结果(0.5)可以精确地表示为浮点数,并且输入数字中的舍入误差可能相互抵消 - 但这不一定可以依赖(例如,当这两个数字首先存储在不同大小的浮点表示中,舍入误差可能不会相互抵消).
在其他情况下,例如0.1 + 0.3,结果实际上不是0.4,但足够接近,0.4是最接近结果的数字,而不是任何其他浮点数.然后,许多语言显示该数字,而不是将实际结果转换回最接近的小数部分.
小智 5
简单地做以下。
function printFloat(){
var myFloatNumber1 = document.getElementById('floatNumber1');
var myFloatNumber2 = document.getElementById('floatNumber2');
var total=parseFloat(myFloatNumber1.value) + parseFloat(myFloatNumber2.value);
alert(total.toFixed(2));
}
Run Code Online (Sandbox Code Playgroud)