作者BloodyDawn (血色曙光)
看板PHP
標題[請益] 請問(int) ((0.1 + 0.7) * 10)為什麼是7
時間Thu May 17 17:54:20 2012
大家好~今天看書上寫了這個範例讓我滿納悶的
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
1F:推 LaPass:二進位誤差.... 05/17 17:55
2F:→ LaPass:PHP算出來會這樣喔?我都沒注意過.... = =" 05/17 17:56
3F:推 kusoayan:沒注意過+1 … XD 05/17 19:45
4F:推 bibo9901:真妙 你把(int)拿掉就變8了 XD 05/17 20:27
5F:推 shadowjohn:這實在太可怕了 05/17 21:51
7F:→ LPH66:這時候就要推這篇了 05/17 22:36
8F:→ chunhsiang:浮點數是存在誤差 對於數值的概念是類似逼近某數 05/17 23:04
9F:→ chunhsiang:像極限 除不進的數就取決於你記憶體花多少他就有多進 05/17 23:06
10F:→ chunhsiang:下轉int 如果x沒有大於等於八 不管怎麼逼近 他都是7 05/17 23:09
11F:→ chunhsiang:所以在程式守則有兩項關於的規定... 05/17 23:11
12F:→ Canboo:看到這個問題就想到當初處理比價網站的平均售價... 05/18 16:03