PHP - 从大型float转换为int将返回0

时间:2013-07-26 14:15:40

标签: php casting floating-point integer

我无法解释以下行为。当使用(int)转换非常大的整数(通过PHP处理为浮点数)时,我得到以下结果:

<?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会返回这些值?

2 个答案:

答案 0 :(得分:4)

你超过了最大值,所以它正在从PHP.net网站上做那些奇怪的事情。您必须检查最大值,但看起来比9E18大。

  

整数的大小取决于平台,尽管最大值约为20亿是通常的值(32位有符号)。 64位平台的最大值通常约为9E18。 PHP不支持无符号整数。整数大小可以使用常量PHP_INT_SIZE来确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX来确定。

答案 1 :(得分:1)

您超过了PHP_INT_MAX的值,这是PHP可以支持的最大整数,在32位系统上通常为2,147,483,647。较大的数字切换到float type