如果我有这个小功能:
<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@H_403_7@
我期望输入字段中的2个数字的和为2位数字:2719.32
但结果是一个不正确的数字…:2719.3199999999997@H_403_7@
解决方法
Why don’t my numbers,like 0.1 + 0.2 add up to a nice round 0.3,and
instead I get a weird result like
0.30000000000000004?@H_403_7@Because internally,computers use a
format (binary floating-point) that
cannot accurately represent a number
like 0.1,0.2 or 0.3 at all.@H_403_7@When the code is compiled or
interpreted,your “0.1” is already
rounded to the nearest number in that
format,which results in a small
rounding error even before the
calculation happens.@H_403_7@
在您的情况下,当您输入的值通过parseFloat()转换时,会发生舍入错误.@H_403_7@
Why do other calculations like 0.1 + 0.4 work correctly?@H_403_7@
In that case,the result (0.5) can be
represented exactly as a
floating-point number,and it’s
possible for rounding errors in the
input numbers to cancel each other out
– But that can’t necessarily be relied upon (e.g. when those two numbers were
stored in differently sized floating
point representations first,the
rounding errors might not offset each
other).@H_403_7@In other cases like 0.1 + 0.3,the result actually isn’t really 0.4,but close enough that 0.4 is the shortest number that is closer to the result than to any other floating-point number. Many languages then display that number instead of converting the actual result back to the closest decimal fraction.@H_403_7@