整数类型转换问题

时间:2013-07-10 20:46:41

标签: php arrays

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生成正确的输出?

3 个答案:

答案 0 :(得分:4)

您最有可能超出平台上int的最大值。

来自Official PHP Doc

  

整数的大小取决于平台,尽管是最大值   大约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亿。

如果你想使用一个浮点数进行类型转换,它有一个更高的限制......

参考: http://php.net/manual/en/language.types.integer.php