2009-08-21 33 views
8

Tại sao microtime này hiển thị lạ trong PHPTại sao microtime này hiển thị lạ trong PHP

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

Trên đây đang hiển thị:
Time4: 2.69412994385E-5

Something với một phức tạp hơn , quy trình chạy dài hơn hiển thị như sau:
Thời gian1: 0,000292062759399

+0

Bạn đang sử dụng PHP4 hoặc PHP5? –

+0

Không có gì lạ về 2.69412994385E-5, ngoại trừ việc nó hàm ý một phép đo với độ chính xác femtosecond. 27E-6 hoặc 27us sẽ dễ đọc hơn và có lẽ thực tế hơn. – pavium

Trả lời

15

E-5 là ký pháp khoa học. Dường như xảy ra khi bạn nối nó với giá trị chuỗi. Thử sử dụng number_format ...?

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

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

+1 Yep Tôi chỉ nhận ra câu trả lời của tôi ngu ngốc đến mức nào. – karim79

+0

khi tôi lặp lại thông qua một số mã nhiều lần như 10.000 lần, tôi nhận được một số rắn, nếu tôi cố gắng chạy mã như 10 lần là khi tôi nhận được số ngắn như vậy – JasonDavis

2

Dường như microtime() này được hiển thị lạ vì PHP có một ngưỡng, ở hai bên trong đó nó sẽ hiển thị hoặc là một số trong ký hiệu khoa học hoặc một ký hiệu thập phân. Cả hai đều là "phao" về mặt kỹ thuật (see documentation).

Dường như ngưỡng này ở đâu đó trong khoảng từ 0,8 giây đến 0,9 giây; ít nhất đó là những gì các bài kiểm tra của tôi kết luận. Sử dụng mã sau đây sẽ hiển thị ký hiệu khoa học:

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

Nhưng nếu chúng tôi thay đổi thời gian chờ thành sleep(0.9), số thập phân được tạo. Điều này có thể hoặc có thể không phải là trường hợp trên tất cả các hệ thống hoặc cài đặt, nhưng điều này ít nhất là những gì thử nghiệm của tôi cho thấy.

Bạn có thể chống lại điều này cho mình bằng cách sử dụng sprintf() chức năng, như thế này:

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

này sẽ luôn hiển thị thời gian dạng số thập phân.

15

Điều bình thường đối với số dài (rất nhỏ hoặc rất lớn) được chuyển đổi thành lũy thừa 10. E-5 chỉ có nghĩa là số được hiển thị là số nhân được nhân (10/10/10/10/10) biến nó thành một con số rất nhỏ.

0,000000000khó đọc hơn 1.23E-13 (ví dụ).

Tuy nhiên nếu bạn muốn xem số ở định dạng khác:

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

này sẽ bổ sung thêm 50 nhà số thập phân với số trên màn hình.

Hy vọng điều đó sẽ hữu ích!

+1

Nên là 'Nó là bình thường đối với số lượng nhỏ HOẶC lớn được chuyển đổi thành quyền hạn của 10 ' Tôi sẽ thận trọng về việc ngoại giao quá nhiều chữ số thập phân. Xem bình luận của tôi với câu trả lời của jasondavis – pavium

+0

Cảm ơn bạn đã nhập. Đã sửa để làm rõ điểm của bạn. Cảm ơn. – Frankie

0

Dont quênfloat:

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

update: nối vào câu trả lời đầu.

Các vấn đề liên quan