最近再做支付宝支付回调的时候发现一个不起眼的坑。
支付宝回调的支付金额我需要跟订单里面的订单金额进行判断,防止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的坑 后期发现问题调试的时候就会很困难,所以一定要养好变编程习惯,将一些坑牢记心里