¿Por qué esta microtime se muestra rara en PHP?

¿Por qué esta microtime se muestra rara en PHP?

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

Lo anterior muestra:
Time4: 2.69412994385E-5

Algo con un proceso de ejecución más complejo y más largo aparece así:
Tiempo1: 0.000292062759399

E-5 es notación científica. Parece que sucede cuando lo concatena con el valor de la cadena. Intenta usar number_format …?

 print "Time4: ". number_format($end4 - $start4, 10)."
"; //or use: printf(".10f", $end - $start)

Es normal que los números largos (muy pequeños o muy grandes) se conviertan en potencias de 10. El E-5 solo significa que el número mostrado se está multiplicando por (10/10/10/10/10) lo que lo convierte en un número pequeño.

0.000000000000123 es mucho más difícil de leer que 1.23E-13 (por ejemplo).

Sin embargo, si desea ver el número en otro formato:

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

Esto agregará 50 decimales al número que se muestra.

¡Espero eso ayude!

Parece que este microtime() se muestra raro porque PHP tiene un umbral, en cada lado del cual se muestra un número en notación científica o uno en notación decimal. Ambas son técnicamente “flotantes” ( ver documentación ).

Parece que este umbral está entre 0.8 segundos y 0.9 segundos; al menos eso es lo que concluyeron mis pruebas. Usar el siguiente código mostrará notación científica:

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

Pero si cambiamos nuestro tiempo de espera para sleep(0.9) , se produce un número decimal. Este puede o no ser el caso en todos los sistemas o instalaciones, pero esto es al menos lo que mostraron mis pruebas.

Puede contrarrestar esto usted mismo mediante el uso de la función sprintf() , como esta:

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

Esto siempre mostrará la hora como un número decimal.

No te olvides de float :

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

actualización: anexa a la respuesta superior.