2013-07-26 58 views
1

我無法解釋以下行爲。使用(int)投射非常大的整數(通過PHP處理爲浮點數)時,得到以下結果:PHP - 從大型浮點數轉換爲int將返回0

<?php 
print (int)9223372036854775800; // returns: 9223372036854775800 
echo "<br />"; 
print (int)11702667999999911110; // returns: -6744076073709639680 
echo "<br />"; 
print (int)17999997999999911110; // returns: -446746073709639680 
echo "<br />"; 
print (int)18400997999999911110; // returns: -45746073709639680 
echo "<br />"; 
print (int)41702667999999999990; // returns: 0 
?> 

爲什麼PHP返回這些值?

+0

也許這種行爲是因爲那些大的值超過了32位或64位的範圍(取決於你使用的是哪個PHP)整數值 –

回答

4

你超出了最大限度,所以它是從PHP.net網站做怪異的東西。你將不得不檢查你的最大值,但看起來比9E18更大。

整數的大小是平臺相關的,儘管最大值約爲20億是通常的值(即32位有符號值)。 64位平臺的最大值通常約爲9E18。 PHP不支持無符號整數。整數大小可以使用常量PHP_INT_SIZE確定,最大值使用自PHP 4.4.0和PHP 5.0.5以來的常量PHP_INT_MAX。

+0

是的,我知道我超過了最大值。但是,在我上面的例子中,似乎沒有對這種情況的一致處理。超過PHP_INT_MAX時是否應該有「可預測的默認」行爲? – user619

1

您超出了PHP_INT_MAX的值,這是PHP可以支持的最大整數,在32位系統上通常爲2,147,483,647。較大的數字切換到float type