【发布时间】:2012-12-05 10:03:31
【问题描述】:
请有人解释下面的结果差异
echo intval(1e10);
输出1410065408
echo 1e10;
输出10000000000
【问题讨论】:
标签: php
请有人解释下面的结果差异
echo intval(1e10);
输出1410065408
echo 1e10;
输出10000000000
【问题讨论】:
标签: php
有符号整数有最大值。在 32 位系统上,即 2^16 或 2147483647。当intval-ing 一个更大的数字时,它将溢出。你找到的值也可以计算出来:
php > echo 1e10 % (2147483647);
1410065408
【讨论】:
来自 PHP 手册:
最大值取决于系统。 32 位系统的最大有符号整数范围为 -2147483648 到 2147483647。例如,在这样的系统上,intval('1000000000000') 将返回 2147483647。64 位系统的最大有符号整数值为 9223372036854775807。
intval 将截断数字
【讨论】:
intval(intval(1e10)+1),我确实得到了 1410065409,所以显然我们不是在谈论最大值。
intval('10000000000') = 2147483647; intval(1e10) = 1410065408; intval(float) 会产生基本上未定义的结果。看看下面的cmets
代码:
<?php
echo 'intval: ' . intval( 1e10 ) . PHP_EOL;
echo '1e10: ' . 1e10 . PHP_EOL;
从 cli 运行
输出:
intval: 10000000000
1e10: 10000000000
Ubuntu 12.10 x64 php5.4
换句话说,您使用的是 x86(32 位)机器。
【讨论】: