[请益] 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