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

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)