2013-07-26 60 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