1
var_dump("555555555555555555555" == "555555555555555555553"); //bool(true)
var_dump("aaaaaaaaaaaaaaaaaaaaa" == "aaaaaaaaaaaaaaaaaaaab"); //bool(false)

为什么会这样?

我知道我可以使用

var_dump(strcmp("555555555555555555555", "555555555555555555553") == 0); //bool(false)

但为什么第一行返回true

4

2 回答 2

4

这是类型强制的副作用。有一篇关于 phpsadness的文章。基本上,比较中的字符串被转换为数字类型,并且由于精度损失,看起来是相等的。

于 2013-10-03T14:21:41.320 回答
1

在你的第一行

var_dump("555555555555555555555" == "555555555555555555553");

这是真的

为什么,如果它们看起来都像数字,类型强制比较运算符会将两个操作数强制为浮点数,即使它们都已经是字符串

这个错误在这里讨论

于 2013-10-03T14:22:30.767 回答