以下腳本包含一個非常奇怪的錯誤。我想檢查一個值是否是一個正整數。要做到這一點,我乘以100將該值封閉到十進制。如果我測試0.07,腳本不計算值7,但值7.00000001。我可以將價值四捨五入,但我想知道爲什麼價值是以這種方式計算的。乘以100時出現的神祕計算錯誤
<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會發生什麼?如果有人能向我解釋,我會很高興。
這只是浮點算法的工作方式。有關詳細的原因討論,請參閱:http://www.scribd.com/doc/5836/What-Every-Computer-Scientist-Should-Know-About-FloatingPoint-Darithmetic –