php浮点数相乘与整型判断的坑

最近再做支付宝支付回调的时候发现一个不起眼的坑。
支付宝回调的支付金额我需要跟订单里面的订单金额进行判断,防止http通信的时候被篡改header包,于是就出现了下面的一幕

//订单数据 total_fee为48 单位分
//支付回调的金额数据为0.48 单位元
$totalFee = 48;
$returnFee = $return['total_fee'] * 100;
if($returnFee != $totalFee) {
   return false;
}

然后一直支付宝回调失败,排查了半天问题才发现我忽略了浮点数就算乘成正数也不能视为整型类型。
突然想起来以前遇到一个坑

$int = 0.58;
var_dump(intval($int * 100));

输出的是0.57

在浮点数里面 0.58是被视为.57999999999999999999999……9999无限接近0.58
再intval强制转换乘整型的时候就默认采用截取法取整

怎么解决float类型和int类型判断和转换

将float类型转化为string类型

$float = 0.58;
var_dump(intval(strval($float * 100)));

输出58

$float = 0.58 * 100;
$int = 58;
if(strval($float) == $int) {
    echo '=';
} else {
  echo '!=';
 }

输出 ‘=’

再开发中很容易忽视一些php的坑 后期发现问题调试的时候就会很困难,所以一定要养好变编程习惯,将一些坑牢记心里

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值