2012-02-28 22 views
1

我怎樣才能讓PHP不是大INT使用1.297503E+17129750300000000000從1.297503E + 17 129750300000000000

代碼:

$dag = 29; 
$maand = 03; 
$jaar = 2012; 

$expdate = $dag . "-" . $maand . "-" . $jaar; 
$unixstamp = strtotime($expdate); 
echo $unixstamp."<br />"; 
$winstamp = ($unixstamp + 11644560000) * 10000000; 

我試圖在LDAP中使用的編號爲時間戳。

回答

2

這就是我會做

>> number_format(1.297503E+17,0,'.','') 
'129750300000000000' 

只是知道,那是你得到的回覆是一個字符串,將被轉換回來,如果你嘗試它做任何arithemtics浮動(在32B平臺測試) 。如果你需要在大整數上進行數學研究,可以看看bc_math擴展

+0

回饋的所有0,謝謝這個作品 – Luuky19 2012-02-28 09:17:43

0

PHP內部使用足夠大的整數。在這裏你的問題是使用回聲:

printf ("%d", $winstamp); 
$winstamp++; 
printf ("%d", $winstamp); 

輸出:

129775320000000000 
129775320000000001 
+0

我越來越 -587196416如果我這樣做 – Luuky19 2012-02-28 09:07:14

+0

其實內部PHP使用32B或64B長整數取決於它是否被編譯爲32B或64B平臺。任何比這更長的數字將被轉換爲浮點表示。 – Mchl 2012-02-28 09:08:34

+0

,我該如何改變? – Luuky19 2012-02-28 09:11:05

0

希望這有助於

echo rtrim(sprintf("%0.15f", $winstamp), "0."); 

這裏使用的sprintf打印最多15位小數,然後微調關閉任何尾隨0或。字符。 (當然,並不能保證所有的東西都能很好的跟隨零點,就像你期望的那樣。)

如果你只是想要一個固定大小,那麼你可以調整15並刪除rtrim。

+0

我不能削減任何看到我需要從計算 – Luuky19 2012-02-28 09:10:12

0

顯然,當PHP遇到一個超過2,147,483,647整數的上限的數字時,它會自動將數字的類型從整數轉換爲double。

幸運的是,我們可以使用number_format()函數將這些數字以科學記數法格式化爲其標準整數形式。這裏是如何做到這一點:

$winstamp = 1202400000; 
$formatted_stamp = number_format($winstamp , 0, '.', ''); 
echo $formatted_stamp; //outputs 1202400000 as expected