[問題] 浮點數尾端出現一長串誤差值

看板Flash作者 (快樂崇拜)時間15年前 (2010/08/15 12:51), 編輯推噓1(108)
留言9則, 4人參與, 最新討論串1/1
最近用for迴圈,針對浮點數測試,如以下 var x=0; var i:int; for(i=0;i<100;i++){ x=x+0.1; trace(x); } 發現如果相加的差額是整數(如x=x+1),則印出非常正常(1,2,3,.....,99,100) 但如果是浮點數(如x=x+0.1, x=x+0.01),尾端時常會出現誤差數值 如以下: [當x=x+0.1] 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 1.0999999999999999 [當x=x+0.01] 0.01 0.02 0.03 0.04 0.05 0.060000000000000005 0.07 0.08 0.09 0.09999999999999999 0.10999999999999999 這樣運算結果就變得不精準 請問有沒有解決辦法?或是哪裡可以調整得精準一點? 如果我只想印出小數點後兩位,又該怎麼處理? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.127.94 ※ 編輯: justaID 來自: 125.224.127.94 (08/15 13:00)

08/15 15:51, , 1F
關於那個誤差值請看
08/15 15:51, 1F

08/15 16:12, , 3F
好完整專業的分析文章@@高手! 我完全沒有複雜的運算
08/15 16:12, 3F

08/15 16:13, , 4F
只有加法 照這文章的可能性分析 應該是數系轉換的原因導致
08/15 16:13, 4F

08/15 16:14, , 5F
誤差囉 這看來是難以調整了~"~
08/15 16:14, 5F

08/15 17:09, , 6F
Math.floor(x*100)/100; 只輸出到小數第二位
08/15 17:09, 6F

08/15 19:22, , 7F
對耶! 感謝樓上大大!真是點醒夢中人
08/15 19:22, 7F

08/18 17:00, , 8F
Number(1.111111).toFixed(2)
08/18 17:00, 8F

08/19 12:55, , 9F
喔喔 有內建函數!!
08/19 12:55, 9F
文章代碼(AID): #1CPt93oe (Flash)