3
$ms = microtime(true);
$ts = $ms * 10;
$i = substr($ts, 0,strpos($ts, "."));
echo "    A: ". $ms;
echo "    B: ". $ts;

echo "    C: ". $i; 
echo "    D: ". intval($i); 
echo "    E: ". (int)$i; 

例子:

A: 1382292940.8799
B: 13822929408.799
C: 13822929408
D: 2147483647
E: 2147483647

E =/= C && D =/= C

为什么会这样?

4

1 回答 1

4

您遇到的问题是溢出问题。32 位整数最多可容纳 40 亿个,有些是无符号的,只有 20 亿个,有些是有符号的。您要转换为整数的数字远大于此:

13,822,929,408

因此,您看到 2147483647,即 32 位有符号整数的限制。

于 2013-10-16T15:57:15.540 回答