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

标签 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>

0.05、0.06 和 0.08 效果很好。但是 0.07 会发生什么?如果有人能向我解释这一点,我会很高兴。

最佳答案

那是因为 javascript 在内部将所有内容转换为 double。结果,由于浮点不准确,所有计算都会产生一些噪音:Floating point inaccuracy examples

解决此问题的一种方法是在所有中间计算后向下舍入到最接近的整数。

关于javascript - 乘以100时出现神秘的计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6486234/

相关文章:

javascript - 如何根据值更改停止 setInvterval?

algorithm - 对大量相似向量进行分组

algorithm - 给定平面上的两条线,如何找到最接近它们交点的整数点?

javascript - PHP 值未使用 AJAX Post 更新

javascript - 如何从 JSON 中删除 HTML 标记

javascript - Angular 8 : URL encoded form POST

c# - 小数到分数

独立计算总分和每个标准的算法

java - 算术进阶3级

javascript - 在 javascript 中搜索一个字符串并使用 splice 和索引 nr 删除它