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 に答える