PHP 浮点型比较的小坑

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值