看板 PHP 關於我們 聯絡資訊
※ 引述《kiey (煉)》之銘言: : $a = 14525.8000; : $b = 1231.0000; : $c = 11.8; : $d = floor($b)*$c; : echo $a*1 < ($b*$c)? 'true ':'false ' ; //T : echo round($a,4) > round(floor($b)*$c,4)? 'true ':'false ' ; //F : echo $a < $d? 'true ':'false ' ; //T : 想請問一下 為什麼結果會是 true false true 呢? : 就我的觀念應該是要 f f f 才對 = = : 有請先進指教 推薦搜尋關鍵字:「浮點數 誤差」或「浮點數 精確度」 用白話說明是這樣 PHP(跟幾乎所有電腦程式)的小數是用浮點數來表示的 而浮點數常常會跟你實際要的數字差一點點,很小一點 所以 - 多做幾次運算可能會出現奇妙的尾差 - 拿來比大小通常 OK,但是數字應該要一樣的時候有時會爆炸 然後整數沒這個問題 =============================== 另外你可以試一下 $a = 14525.8000; $b = 1231.0000; $c = 11.8; $d = floor($b)*$c; var_export($a); echo "\n"; var_export($b*$c); echo "\n"; var_export($d); echo "\n"; 在我的電腦上輸出結果是: 14525.799999999999 14525.800000000001 14525.800000000001 -- Sent from my little pony -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.27.53.129 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1476194491.A.E72.html ※ 編輯: GALINE (114.27.53.129), 10/11/2016 22:07:28