javascript – 为什么2个parseFloat变量的总和给我一个不正确的十进制数

前端之家收集整理的这篇文章主要介绍了javascript – 为什么2个parseFloat变量的总和给我一个不正确的十进制数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Is floating point math broken?29个
如果我有这个小功能
<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@

一轮将做这个工作,但是我不知道为什么代码在这个数字上做到这一点…
在其他数字组合中,总和是正确的…@H_403_7@

解决方法

The Floating-Point-Guide:

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@

猜你在找的JavaScript相关文章