代码之家  ›  专栏  ›  技术社区  ›  Rain cheladon

PHP将数字解释为浮点数,即使它们小于INT_MAX

  •  0
  • Rain cheladon  · 技术社区  · 6 年前

    PHP文档 here 声明:

    但是,如果一个操作的结果小于PHP_INT_MAX,该怎么办?

    请将此代码片段作为示例:

    $max_int = 2**31-1 ; //  2147483647
    var_dump(PHP_INT_MAX === $max_int); // false
    

    如您所见,即使一个操作产生一个有效的int值,PHP似乎也会将结果转换成float

    var_dump(PHP_INT_MAX === (int) $max_int) // true
    

    我的问题:

    在进行任何计算之前,PHP解释器是否将结果转换为float?

    PHP不应该计算结果然后相应地设置类型吗?(有道理吧?)

    编辑:

    PHP版本:7.2.1 32位

    我在用XAMPP

    1 回复  |  直到 6 年前
        1
  •  4
  •   johannes    6 年前

    计算时 $max_int = 2**31-1 发动机按步骤执行此操作:

    $tmp = 2**31;
    $max_int = $tmp-1
    

    在这里 $tmp 大于最大整数值并转换为浮点数。结果是有一个浮点减法,从而产生一个浮点。既然它是漂浮的,它就必须保持漂浮。