1

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

4

2 回答 2

4

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

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

于 2013-07-26T14:23:11.517 回答
1

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

于 2013-07-26T14:23:27.183 回答