以下脚本包含一个非常奇怪的错误。我想检查一个值是否为正整数。为此,我乘以 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/