2013-07-10 40 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大小。