搜索

首页  >  问答  >  正文

php - 在使用is_int函数时,当需要判定的数字超过了9位则返回了false,是为什么?

php 在使用is_int函数时,当需要判定的数字超过了9位则返回了false,是为什么?

大家讲道理大家讲道理2750 天前1019

全部回复(2)我来回复

  • 滿天的星座

    滿天的星座2017-05-16 13:06:03

    。。。。
    Integer 整型是有个范围的,而这个范围是跟平台版本有关的32位(最大值为:2^31 - 1)与64位(最大值为:2^63 - 1)的范围不一致。这时候超出范围的数字会被解释为float类型,所以is_int()函数判断会是false,下面是64位的整数溢出:

    $large_number = 9223372036854775807;
    var_dump(is_int($large_number));                     // true
    
    $large_number = 9223372036854775808;
    var_dump(is_int($large_number));                    // false

    回复
    0
  • 世界只因有你

    世界只因有你2017-05-16 13:06:03

    根据php官网手册:

    整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18,除了 Windows 下 PHP 7 以前的版本,总是 32 位的。 PHP 不支持无符号的 integer。Integer 值的字长可以用常量 PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量 PHP_INT_MAX 来表示,最小值可以在 PHP 7.0.0 及以后的版本中用常量 PHP_INT_MIN 表示。

    所以对于32位的integer,有符号2^31=2147483648(约20亿),是一个10位数,所以针对你说的情况,超过9位数会返回false是存在的.

    回复
    0
  • 取消回复