PHP 等式判断出错
var_dump(1990 == (19.90 * 100))
// 输出 false
上面这个问题出现的很神奇,我们在做一次优惠活动时,价格降到19.90 时微信回调实现的 因为微信回调,单位是分,所以传回来的额度数字是 1990,而我们实际价格是19.90 元, 结果导致大批量回调失败
- 问题出现时,瞬间锁定了发生错误的地方,但是一直没有想到会是PHP的锅,来回测试了几次,发现只有19.90这个价格发生问题
原因排查
var_dump(1990 == intval(19.90 * 100))
// 输出 false
var_dump(19.90 * 100)
// 输出 1990.0
var_dump(intval(19.90 * 100))
// 输出 1989
// 发生原因你看似有穷的小数, 在计算机的二进制表示里却是无穷的
处理办法
var_dump(1990 == intval(strval(19.90 * 100))
// 输出 true