CASE # 1:
我有以下代码,它输出正确的编号
<?php
$integer = 10000000000;
$array = array($integer);
print_r($array[0]); //output = 1000000000
?>
CASE # 2:
但当我显式地将相同的数字转换为整数时,它会给出不同的输出
<?php
$integer = (int)10000000000;
$array = array($integer);
print_r($array[0]); //output = 1410065408
?>
CASE # 3:
如果我将数字缩小一个0并键入强制转换,那么它将返回正确的数字
<?php
$integer = (int)1000000000;
$array = array($integer);
print_r($array[0]); //output = 1000000000
?>
为什么它没有在CASE # 2
中产生正确的输出?
您的平台上最有可能超过int的最大值。
来自官方PHP文档:
整数的大小取决于平台,尽管最大值大约20亿是通常的值(即32位有符号)。整数大小可以是使用常数PHP_INT_SIZE确定,最大值使用INT_ MAX。
对于32位平台:
整数可以是-2147483648到2147483647
对于64位平台:
整数可以是9223372036854775808到9223372036864775807
在第二个示例中,您溢出了整数的最大大小。在您的第一个示例中,PHP自动使用较大的数字数据类型(如float
)来保存变量,因为它对于int来说太大了。当您在示例2中显式将其强制转换为int
时,因为它大于最大大小,它会将其截断为最大大小。在示例3中,该数字短到足以包含在int
中。如果您尝试将其强制转换为float
,它将产生正确的结果。
<?php
$integer = (float)10000000000;
$array = array($integer);
print_r($array[0]); //output = 10000000000
?>
常量PHP_INT_SIZE
将告诉您php安装中支持的最大int
大小。
整数的最大值取决于平台,但大约为20亿。案例2是100亿。
如果你想使用浮点类型转换,它有一个更高的限制。。。
参考:http://php.net/manual/en/language.types.integer.php