【问题标题】:php long numbers in string comparison字符串比较中的php长数字
【发布时间】:2013-10-03 14:20:19
【问题描述】:
var_dump("555555555555555555555" == "555555555555555555553"); //bool(true)
var_dump("aaaaaaaaaaaaaaaaaaaaa" == "aaaaaaaaaaaaaaaaaaaab"); //bool(false)

为什么会这样?

我知道我可以使用

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

但是为什么第一行返回true

【问题讨论】:

标签: php string comparison


【解决方案1】:

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

【讨论】:

  • @MarcelKorpel,绝对。我有一个严格的规定,永远不要使用==
  • 我只是被更高的 PHP 版本卡住了。始终使用=== 来比较这些字符串。
【解决方案2】:

在你的第一行

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

这是真的

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

这个错误被讨论here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多