var_dump("555555555555555555555" == "555555555555555555553"); //bool(true)
var_dump("aaaaaaaaaaaaaaaaaaaaa" == "aaaaaaaaaaaaaaaaaaaab"); //bool(false)
为什么会这样?
我知道我可以使用
var_dump(strcmp("555555555555555555555", "555555555555555555553") == 0); //bool(false)
但为什么第一行会返回true
?
答案 0 :(得分:4)
这是类型强制的副作用。 关于它有一个article on phpsadness。 基本上,比较中的字符串被转换为数字类型,并且由于精度损失,看起来是相等的。
答案 1 :(得分:1)
在你的第一行
var_dump("555555555555555555555" == "555555555555555555553");
true
为什么因为,类型强制比较运算符会将两个操作数强制转换为浮点数,如果它们看起来都是数字,即使它们都是字符串
我们讨论了这个错误here