Yan.G WebServer Dev Engineer

php 等式判断错误


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

Content