如果我有这个小功能:
<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()"/>
在第1栏中输入:221.58 在字段2中我输入:2497.74
我希望输入字段中的2个数字的总和为2个数字:2719.32 但结果是错误的数字...:2719.3199999999997
一轮将完成这项工作,但我只是不明白为什么代码在这个数字上做了... 在其他数字组合上,总和是正确的......
答案 0 :(得分:19)
为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而且 相反,我得到一个奇怪的结果,如 0.30000000000000004吗
因为在内部,计算机使用a 格式(二进制浮点) 无法准确表示一个数字 像0.1,0.2或0.3一样。
编译代码时 解释,你的“0.1”已经存在 四舍五入到最接近的数字 格式,这导致一个小的 甚至在之前的舍入错误 计算发生了。
在您的情况下,当您输入的值按parseFloat()
转换时,会发生舍入错误。
为什么其他计算如0.1 + 0.4正常工作?
在这种情况下,结果(0.5)可以 完全代表一个 浮点数,它是 可能导致舍入错误 输入数字相互抵消 - 但这不一定是可靠的(例如,当这两个数字是 存储在不同大小的浮动中 点表示首先是 舍入误差可能不会抵消每个 其他)。
在其他情况下,如0.1 + 0.3, 结果实际上并不是0.4,而是 足够接近,0.4是最短的 更接近结果的数字 而不是任何其他浮点数 数。然后显示许多语言 这个数字而不是转换 实际结果回到最近 小数部分。
答案 1 :(得分:4)
请参阅:
答案 2 :(得分:3)
只需遵循。
function printFloat(){
var myFloatNumber1 = document.getElementById('floatNumber1');
var myFloatNumber2 = document.getElementById('floatNumber2');
var total=parseFloat(myFloatNumber1.value) + parseFloat(myFloatNumber2.value);
alert(total.toFixed(2));
}