[請益] round四捨五入後, *100出問題

看板PHP作者 (耐心等待)時間11年前 (2014/06/03 16:01), 11年前編輯推噓3(309)
留言12則, 3人參與, 最新討論串1/1
狀況如下: $a = 0.9815 //使用 round() 取得 echo $a*100."%"; //出現 98.15000000000001% $b = 0.8472 //使用 round() 取得 echo $a*100."%"; //出現 84.72% $c = 0.8531 //使用 round() 取得 echo $c*100."%"; //出現 85.31999999999999% 請教這是什麼原因造成,應該如何修正?@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.199.55 ※ 文章網址: http://www.ptt.cc/bbs/PHP/M.1401782519.A.434.html ※ 編輯: FT6034 (118.168.199.55), 06/03/2014 16:02:38

06/03 17:06, , 1F
浮點數精度問題,看要不要用bcmath,或是round再除小數位數
06/03 17:06, 1F

06/03 18:48, , 2F
或者乘完 100 再做 round (當然精度要調整一下)
06/03 18:48, 2F

06/03 18:49, , 3F
啊, 一樓有提了XD 不過 php 的 round 可以指定精度所以不必
06/03 18:49, 3F

06/03 18:49, , 4F
先拉到整數位再 round 再除
06/03 18:49, 4F
謝謝 dinos 和 LPH66 的回覆 我發現只有在那個php檔裡,會出現這個問題 我開一個新檔,單純去測試運算部分,就會正常 @@" 例如:同樣是以下的程式碼,在該php裡有問題,開新的就沒問題 $a = 259; $b = 244; $c = $b/$a; echo $c."<br />"; echo round($c, 4)."<br />"; echo (round($c, 4)*100)."<br />"; ※ 編輯: FT6034 (118.168.199.55), 06/04/2014 08:43:47

06/04 16:34, , 5F
這有點微妙, 你要不要試試乘完再 round?
06/04 16:34, 5F

06/04 16:36, , 6F
原來是 round($x, 0.0001)*100 則改成 round($x*100, 0.01)
06/04 16:36, 6F

06/04 16:37, , 7F
之所以微妙的原因是因為該 php 裡的值可能經過多重運算而來
06/04 16:37, 7F

06/04 16:37, , 8F
因此不一定正好是你認為的那個數值
06/04 16:37, 8F

06/09 10:42, , 9F
IEEE 754, |4-2.7.0.3| == 1
06/09 10:42, 9F

06/09 10:43, , 10F
浮點數運算時,做判斷時要注意 :)
06/09 10:43, 10F

06/09 10:44, , 11F
如同LPH說的,不一定正好是你認為的那個數值。
06/09 10:44, 11F

06/09 10:45, , 12F
再試試 |3-2.7-0.3| == 0,可觀察運算後的值。
06/09 10:45, 12F
文章代碼(AID): #1JZO3tGq (PHP)
文章代碼(AID): #1JZO3tGq (PHP)