2013-10-03 174 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