php 在使用is_int函數時,當需要判定的數字超過了9位則回傳了false,是為什麼?
光阴似箭催人老,日月如移越少年。
。 。 。 。 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
根據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是存在的.
2^31=2147483648
。 。 。 。
Integer 整型是有個範圍的,而這個範圍是跟平台版本有關的32位元(最大值為:2^31 - 1)與64位元(最大值為:2^63 - 1)的範圍不一致。這時候超出範圍的數字會被解釋為float型,所以is_int()函數判斷會是false,下面是64位的整數溢位:
根據php官網手冊:
所以對於32位的integer,有符號
2^31=2147483648
(約20億),是一個10位數,所以針對你說的情況,超過9位數會返回false是存在的.