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

作者: FT6034 (耐心等待)   2014-06-03 16:01:57
狀況如下:
$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%
請教這是什麼原因造成,應該如何修正?@@"
作者: dinos (守護神)   2014-06-03 17:06:00
浮點數精度問題,看要不要用bcmath,或是round再除小數位數
作者: LPH66 (-6.2598534e+18f)   2014-06-03 18:48:00
或者乘完 100 再做 round (當然精度要調整一下)啊, 一樓有提了XD 不過 php 的 round 可以指定精度所以不必先拉到整數位再 round 再除這有點微妙, 你要不要試試乘完再 round?原來是 round($x, 0.0001)*100 則改成 round($x*100, 0.01)之所以微妙的原因是因為該 php 裡的值可能經過多重運算而來因此不一定正好是你認為的那個數值
作者: hwChang (聰明是天賦 善良是選擇)   2014-06-09 10:42:00
IEEE 754, |4-2.7.0.3| == 1浮點數運算時,做判斷時要注意 :)如同LPH說的,不一定正好是你認為的那個數值。再試試 |3-2.7-0.3| == 0,可觀察運算後的值。

Links booklink

Contact Us: admin [ a t ] ucptt.com