看板 Flash 關於我們 聯絡資訊
最近用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)
LPH66:關於那個誤差值請看 08/15 15:51
justaID:好完整專業的分析文章@@高手! 我完全沒有複雜的運算 08/15 16:12
justaID:只有加法 照這文章的可能性分析 應該是數系轉換的原因導致 08/15 16:13
justaID:誤差囉 這看來是難以調整了~"~ 08/15 16:14
etrexetrex: Math.floor(x*100)/100; 只輸出到小數第二位 08/15 17:09
justaID:對耶! 感謝樓上大大!真是點醒夢中人 08/15 19:22
ben0209:Number(1.111111).toFixed(2) 08/18 17:00
etrexetrex:喔喔 有內建函數!! 08/19 12:55