我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成
歡迎各位有需要的教師和博碩文化索取教材

AS3.0小數運算BUG

今天處理帶錢問題時,發現AS3的Number相減的一個問題
討論串如下
http://zengrong.net/post/1186.htm
http://blog.csdn.net/bill1315/article/details/8574109

因此在撰寫程式時,

應盡量避免直接將兩個帶小數點的NUMBER做運算
而應該以整數型態做運算,運算完後再做小數點的位移

或許對一些人而言這是已知的事
但還是希望能夠分享一些自己曾遇到的錯誤以避免大家再發生相同問題~

看下面的代碼:

1
2
3
4
var n1:Number = 0.7;
var n2:Number = 0.4;
trace(n1 - n2);
//輸出 0.29999999999999993

簡單說,就是兩個一位小數相減,差為何不是一位小數?
經測試,乘法也有同樣的問題。

GOOGLE找到了Flex團隊的一個回覆:http://old.nabble.com/Float-number-calculation-in-AS3-td18447329.html

從回覆看,AS3的Number與JAVA或C++的double類似,採用二進制分數而非十進制分數保存浮點部分,因此會導致不夠精確。這是語言的設計思路所致。當然,從另一個思路看,它也是個BUG。


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!