Почему это микро-время показалось странным в PHP

Почему это микро-время показалось странным в PHP

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

Вышеприведенное показывает:
Time4: 2.69412994385E-5

Вместо этого возникает нечто более сложное, более продолжительное время:
Время1: 0.000292062759399

E-5 – это научная нотация. Кажется, произойдет, когда вы соедините его со строковым значением. Попробуйте использовать number_format …?

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

Это нормально для длинных чисел (очень малых или очень больших), которые должны быть преобразованы в степени 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 десятичных домиков к отображаемому номеру.

Надеюсь, поможет!

Похоже, что это microtime() появляется странно, потому что PHP имеет порог, по обе стороны которого он отображает либо число в научной нотации, либо одно в десятичной нотации. Оба они технически «плавают» ( см. Документацию ).

Кажется, что этот порог находится где-то между 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 />'; 

Это всегда будет показывать время как десятичное число.