嘿,所有,讓我們直接跳到代碼示例,以顯示ECMAScript/JavaScript/AS3如何不能做簡單的數學計算(AS3爲Number類使用'IEEE-754雙精度浮點數'與JavaScript中使用的相同)...爲什麼我在ECMAScript/ActionScript 3中看到不精確的浮點結果?
trace(1.1); //'1.1': Ok, fine, looks good.
trace(1.1*100); //'110.00000000000001': What!?
trace((1.1*100)/100); //'1.1': Brings it back to 1.1 (since we're apparently multiplying by *approximately* 100 and then dividing by the same *approximate* '100' amount)
trace(1.1*100-110); //'1.4210854715202004e-14': Proof that according to AS3, 1.1*100!=110 (i.e. this isn't just a bug in Number.toString())
trace(1.1*100==110); //'false': Even further proof that according to AS3, 1.1*100!=110
什麼給出了?
的100的第三行*是*確切。這是近似的1.1(沒有用二進制表示1/10的有限方式)。 「痕跡(1.1)」的原因是正確的,因爲它確切地說是足夠的小數位。乘以100只會將錯誤轉移到打印的部分。 – 2009-10-20 21:13:00