Почему это микротайм странно проявляется в PHP? - PullRequest
9 голосов
/ 21 августа 2009

Почему это микротайм странно проявляется в PHP

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

Выше показано:
Время 4: 2.69412994385E-5

Вместо этого появляется что-то с более сложным, более долгим процессом Время 1: 0,000292062759399

Ответы [ 4 ]

16 голосов
/ 21 августа 2009

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

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

//or use:               printf(".10f", $end - $start)
15 голосов
/ 21 августа 2009

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

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

2 голосов
/ 21 августа 2009

Кажется, что 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 />';

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

0 голосов
/ 01 марта 2018

Не забудьте float:

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

обновление: добавлено в начало ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...