var_dump("555555555555555555555" == "555555555555555555553"); //bool(true)
var_dump("aaaaaaaaaaaaaaaaaaaaa" == "aaaaaaaaaaaaaaaaaaaab"); //bool(false)
为什么会这样?
我知道我可以使用
var_dump(strcmp("555555555555555555555", "555555555555555555553") == 0); //bool(false)
但是为什么第一行返回true
?
这是类型强制的副作用。有一篇关于phpsadness的文章。基本上,比较中的字符串将转换为数值类型,并且由于精度损失,似乎相等。
在第一行
var_dump("555555555555555555555" == "555555555555555555553");
这是真的
为什么,因为,如果两个操作数看起来都像数字,则类型强制比较运算符会将它们强制为浮点数,即使它们都已经是字符串
此处讨论此错误