Javascript 乘以100时出现神秘的计算错误
下面的脚本包含一个非常奇怪的错误。我想检查一个值是否为正整数。要做到这一点,我乘以100将该值括在十进制中。如果我测试0.07,脚本不会计算值7,而是计算值7.00000001。我可以对值进行四舍五入,但我想知道为什么要这样计算值Javascript 乘以100时出现神秘的计算错误,javascript,math,Javascript,Math,下面的脚本包含一个非常奇怪的错误。我想检查一个值是否为正整数。要做到这一点,我乘以100将该值括在十进制中。如果我测试0.07,脚本不会计算值7,而是计算值7.00000001。我可以对值进行四舍五入,但我想知道为什么要这样计算值 <script type="text/javascript"> var isPositiveInt = function(i) { i = i*100; return ((i % 1) == 0 &&
<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>
var isPositiveInt=函数(i){
i=i*100;
返回((i%1)==0&&i>=0);
};
0.05、0.06和0.08可以正常工作。但是0.07会发生什么呢?如果有人能给我解释一下,我会很高兴的。这就是所谓的数值数学。计算机不是对实数进行运算,而是对它们的近似值进行运算,这种近似值会带来像这样的舍入误差 对于0.05、0.06和0.08,您很幸运,它们在您的PC上有一个精确的浮点表示。0.07的情况并非如此。请注意,在不同的PC/浏览器上,结果可能不同
有关更多信息,请参阅。,这是因为javascript在内部将所有内容强制转换为双精度。因此,由于浮点不准确,所有计算都会拾取一些噪声:
解决此问题的一种方法是,在所有中间计算之后,将整数向下舍入到最接近的整数。这正是浮点运算的工作方式。有关原因的详细讨论,请参见:仅当浏览器不符合ECMA-262(其中规定了双精度64位二进制格式IEEE 754值)(ECMA-262§4.3.19)时,结果才会不同。