php - 在使用is_int函數時,當需要判定的數字超過了9位則傳回了false,是為什麼?
大家讲道理
大家讲道理 2017-05-16 13:04:03
0
2
1014

php 在使用is_int函數時,當需要判定的數字超過了9位則回傳了false,是為什麼?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
滿天的星座

。 。 。 。
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是存在的.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板