2013-07-10 39 views
7

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

看起来你已经超出了整数类型的限制。一个整数的最大值是2147483647.在这里阅读它:http://php.net/manual/en/language.types.integer.php – SamHuckaby

+0

是的,你已经超过了Integer类型的限制,所以它转换为已知的最大整数。 – MurifoX

+0

需要注意的是,第一种情况“起作用”是因为PHP将它自动转换为一个字符串(或者可以处理该数字的某种类型)。 – SamHuckaby

回答

4

您很可能在您的平台上超过int的最大值。

Official PHP Doc

的整数的大小是依赖于平台的,虽然约两十亿最大值 是通常的值(这是32位带符号的)。整数大小可以是 ,使用常量PHP_INT_SIZE确定,最大值使用 常数PHP_INT_MAX自PHP 4.4.0和PHP 5.0.5起。

对于32位平台:

整数可以是从-2147483648到2147483647

对于64位平台:

整数可以是从-9223372036854775808到9223372036854775807

+0

是的,现在有道理。我用'float'代替它输出正确的数字。谢谢! –

+0

不客气,很高兴知道你的问题解决了。 – anubhava

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大小。