乘以100时出现神秘计算错误

Tob*_*lis 5 javascript math

以下脚本包含一个非常奇怪的错误.我想检查一个值是否为正整数.为此,我乘以100将值括起来.如果我测试0.07,则脚本不计算值7,而是计算值7.00000001.我可以对值进行舍入,但我想知道为什么以这种方式计算值.

<script type="text/javascript">

  var isPositiveInt = function(i) {
        i = i*100;  
      return ((i % 1) == 0 && i >= 0);
  }; 

</script>

<a href="#" onclick="alert(isPositiveInt('0.07')); return false;">Try it out!</a>
Run Code Online (Sandbox Code Playgroud)

0.05,0.06和0.08工作正常.但是0.07会发生什么?如果有人能向我解释,我会很高兴.

Mik*_*ola 5

这是因为javascript在内部将所有内容都转换为double.因此,由于浮点不准确,所有计算都会产生一些噪声: 浮点不准确的例子

解决此问题的一种方法是在所有中间计算之后向下舍入到最近的int.