字符串比较中的 PHP 长数字


php long numbers in string comparison

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

为什么会这样?

我知道我可以使用

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

但是为什么第一行返回true

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

在第一行

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

这是真的

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

此处讨论此错误