PHP浮点型比较的坑
php浮点型比较的坑,理论上浮点型的数据都是有精度损失的,不能直接比较大小,但是有时候需要比较浮点数是否相等,这里会有坑,跟我们想的都不太一样
<?php
die(var_dump(1200.85 * 100 === 120085));
上面的结果看表面意思是true,但是实际运行确实false
php浮点数值并不能比较大小 因为php采用的是双精度计数 取整比较会导致精度丢失 连个类型都是不一样的 一个是float 一个是int 比较大小肯定是有误差的
解决方法 可以使用bc函数bccomp 或者有明确小数位的时候可以取整比较round 或者使用gmp函数gmp_cmp 但是gmp函数和bc函数都需要在编译php时安装对应的扩展 线上操作就不太方便了
还有一种临时解决方法 将要比较的两个数全部强制转为字符串 然后通过字符串比较相等的方式来判断 具体操作如下:strval(1200.85 * 100)
具体的可以参考下php官方手册,靠上方位置有一段大红的警告 有对应的说明
官方参考: https://www.php.net/manual/zh/language.types.float.php