[請益] 請問(int) ((0.1 + 0.7) * 10)為什麼是7

看板PHP作者 (血色曙光)時間13年前 (2012/05/17 17:54), 編輯推噓5(507)
留言12則, 7人參與, 最新討論串1/2 (看更多)
大家好~今天看書上寫了這個範例讓我滿納悶的 PHP Code : echo (int) ((0.1 + 0.7) * 10); 正常情況下看到應該會印出8,但書上寫的答案是7 我也用http://writecodeonline.com/php/這個網站試了一下確實是印出7 書上的說法是在這邊最後計算的結果是7.999999再轉換成8 但遇到將型態轉成整數就會變成了7 那這邊有兩個問題: 1.我把0.7換成0.1~0.9但就只有0.7會有這個問題,請問是為什麼呢? 2.為什麼在這裡的計算結果會變成了7.999999呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.63.50.193

05/17 17:55, , 1F
二進位誤差....
05/17 17:55, 1F

05/17 17:56, , 2F
PHP算出來會這樣喔?我都沒注意過.... = ="
05/17 17:56, 2F

05/17 19:45, , 3F
沒注意過+1 … XD
05/17 19:45, 3F

05/17 20:27, , 4F
真妙 你把(int)拿掉就變8了 XD
05/17 20:27, 4F

05/17 21:51, , 5F
這實在太可怕了
05/17 21:51, 5F

05/17 22:36, , 7F
這時候就要推這篇了
05/17 22:36, 7F

05/17 23:04, , 8F
浮點數是存在誤差 對於數值的概念是類似逼近某數
05/17 23:04, 8F

05/17 23:06, , 9F
像極限 除不進的數就取決於你記憶體花多少他就有多進
05/17 23:06, 9F

05/17 23:09, , 10F
下轉int 如果x沒有大於等於八 不管怎麼逼近 他都是7
05/17 23:09, 10F

05/17 23:11, , 11F
所以在程式守則有兩項關於的規定...
05/17 23:11, 11F

05/18 16:03, , 12F
看到這個問題就想到當初處理比價網站的平均售價...
05/18 16:03, 12F
文章代碼(AID): #1FjChI6J (PHP)
文章代碼(AID): #1FjChI6J (PHP)