PHP从大浮点转换为int将返回0


PHP - cast from large float to int will return 0

我无法解释以下行为。当用(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为什么返回这些值?

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

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

您超过了PHP_INT_MAX的值,这是PHP可以支持的最大整数,在32位系统上通常为2147483647。较大的数字会切换到浮动类型。