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
生成正确的输出?
答案 0 :(得分:4)
您最有可能超出平台上int的最大值。
整数的大小取决于平台,尽管是最大值 大约20亿是通常的值(32位签名)。整数大小可以 使用常量PHP_INT_SIZE确定,并使用最大值 自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX。
对于32位平台:
整数可以是-2147483648到2147483647
对于64位平台:
整数可以是-9223372036854775808到9223372036854775807
答案 1 :(得分:1)
您在第二个示例中溢出了整数的最大大小。在您的第一个示例中,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
大小。
答案 2 :(得分:0)
整数的最大值取决于平台,但大约为20亿。案例#2是100亿。
如果你想使用一个浮点数进行类型转换,它有一个更高的限制......