2013-10-03 120 views
0

快速简单的问题:PHP长数字字符串比较

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

为什么会出现这种情况?

我知道我可以使用

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

但是,为什么第一行返回true?

+0

可能重复ifth ==和===在php](http://stackoverflow.com/questions/6316784/what-is-the-difference-between-and-in-php) – mario

回答

3

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

+0

@MarcelKorpel,绝对。我有一个严格的规则,永远不要使用'=='。 – Denis

+0

我只是被更高的PHP版本卡住了。总是使用'==='比较这些字符串。 –

1

在你的第一行

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

真正

为什么?因为,类型胁迫比较运营商将迫使两个操作数为浮点数,如果他们两个看起来像数字,即使他们是双方已经弦乐器

此错误是讨论[什么是d here