2013-10-16 31 views
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; 

例如:串爲int投PHP變化值

答:1382292940.8799
B:13822929408.799
C:13822929408
d:2147483647
E:2147483647

但是

E =/= C & & d =/= C

爲什麼會出現這種情況?

+2

整數溢出。 – bwoebi

+0

'2147483647'是PHP可以存儲在32位整數中的最大數字!看到這裏:http://php.net/manual/language.types.integer.php – ComFreek

+0

你正在運行一個32位的服務器?我在http://writecodeonline.com/php/上測試了您的代碼,並提供了您期望的結果。 – Halcyon

回答

4

您遇到的問題是溢出問題。 32位整數保持高達40億和一些未簽名,只有20億和一些簽名。要轉換爲整數的數量遠大於:

13,822,929,408 

因此,你所看到的2147483647,對於一個32位有符號整數的限制。

+0

'$ ts'正確顯示的原因是PHP正在計算/存儲它爲雙精度浮點數。 – Sammitch