2009-08-21 34 views
8

奇怪爲什麼這個microtime中顯示出來怪異的PHP這是爲什麼microtime中顯示出來的PHP

$start4 = microtime(true); 
    // run some php code 
$end4 = microtime(true); 
print "Time4: ". ($end4 - $start4)."<br />"; 

上面正顯示出:
時間4:2.69412994385E-5

用的東西更復雜,更長的運行過程中顯示了這樣的代替:
時間1:0.000292062759399

+0

您正在使用PHP4或PHP5? – 2009-08-21 04:17:48

+0

沒什麼怪異約2.69412994385E-5,不同之處在於它意味着與飛秒精度的測量。 27E-6或27us會更容易閱讀,可能更現實。 – pavium 2009-08-21 05:12:46

回答

15

E-5是科學記數法。似乎在將它與字符串值連接時發生。嘗試使用number_format ...?

print "Time4: ". number_format($end4 - $start4, 10)."<br />"; 

//or use:    printf(".10f", $end - $start) 
+0

+1是的,我剛剛意識到我的答案是多麼愚蠢。 – karim79 2009-08-21 04:15:49

+0

當我多次迭代一些代碼,如10,000次時,我得到一個固定的數字,如果我嘗試運行代碼10次就是當我得到這樣的短數字 – JasonDavis 2009-08-21 04:16:05

2

看來,這是microtime()顯示出來奇怪,因爲PHP具有閾值,在任一側上,其中它顯示出對科學記數法的數或一個在十進制形式。這兩個在技術上「花車」(see documentation)。

似乎這個閾值是0.8秒和0.9秒之間的某處;至少這就是我的測試結論。使用下面的代碼將顯示科學記數法:

$start4 = microtime(true); 
sleep(0.8); 
$end4 = microtime(true); 
echo 'Time4: ' . ($end4 - $start4) . '<br />'; 

但是,如果我們改變我們的等待時間sleep(0.9),產生一個十進制數。這在所有系統或裝置上都可能是或不是這樣,但這至少是我的測試顯示的。

您可以通過使用sprintf()功能,這樣抵消這個自己:

$start4 = microtime(true); 
sleep(0.8); 
$end4 = microtime(true); 
echo 'Time4: ' . sprintf('%f', $end4 - $start4) . '<br />'; 

這將始終顯示時間爲十進制數。

15

這是正常的長數字(非常小或非常大),以被轉換成10的冪E-5只是意味着所顯示的號碼是與否有關(10/10/10/10/10)乘以其使其成爲一個非常小的數字。

0.000000000000123是更難使用比讀取 1.23E-13(例如)。

不過如果你想查看其它格式的數字:

$start = microtime(true); 
$end = microtime(true); 
echo "Time: ", number_format($end - $start, 50); 

這將增加50樓十進制的房屋數量上顯示。

希望它能幫助!

+1

應該是'這是正常的小數或大數被轉換爲10的冪 我會謹慎的關於剔除太多小數位。看到我的評論jasondavis的回答 – pavium 2009-08-21 05:53:39

+0

感謝您的輸入。更正以澄清你的觀點。謝謝。 – Frankie 2009-08-26 03:09:26

0

不要忘記float

number_format((float) microtime(true), 10); 
------------------^ 

更新:追加到頂端回答。