作者justaID (快樂崇拜)
看板Flash
標題[問題] 浮點數尾端出現一長串誤差值
時間Sun Aug 15 12:51:13 2010
最近用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