php长字符串比较

时间:2013-10-03 14:20:20

标签: php string comparison

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

为什么会这样?

我知道我可以使用

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

但为什么第一行会返回true

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

在你的第一行

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

true

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

我们讨论了这个错误here