php7采坑记:浮点型数据比较
今天在项目中遇到一个奇怪的问题,经过计算后的double类型的变量的值相等的两个变量进行比较,结果却是不相等。
<?php$a=42735.04;$b=17806.2;$c=$a/36;$c=round($c,2);$d=$c*15;echo'$bvalueis:'.$b."\n";echo'$dvalueis:'.$d."\n";if($b==$d){echo"ok\n";}else{echo"sorry\n";}
得到结果如下图,明明两个变量的值是一样的,做'=='比较运算却返回false
原因是php7中的浮点数 经过 /,*,round()等一系列运算后,精度发生了变化。
解决方案:将任意精度的变量作为字符串进行比较。
php7中已经提供较好的解决方案.
(PHP4,PHP5,PHP7)bccomp—比较两个任意精度的数字说明intbccomp(string$left_operand,string$right_operand[,int$scale=int])把right_operand和left_operand作比较,并且返回一个整数的结果.
最终使用bccomp()来进行比较解决问题
if(bccomp((string)$b,(string)$d,2)===0){echo"yes\n";}else{echo"no\n";}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。