Почему на этот раз обнаруживается странный в PHP

Полезные и чистые высокоуровневые абстракции значительно более важны, чем производительность

один пример:

Слишком часто я смотрю, коллеги, проводящие часы, переписывающие, усложнили Sprocs или значительные запросы LINQ, которые возвращают неинтуитивные анонимные типы ради "производительности".

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

9
задан JasonDavis 21 August 2009 в 04:06
поделиться

3 ответа

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

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

//or use:               printf(".10f", $end - $start)
16
ответ дан 4 December 2019 в 06:57
поделиться

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

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

15
ответ дан 4 December 2019 в 06:57
поделиться

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

Время всегда будет отображаться в виде десятичного числа.

2
ответ дан 4 December 2019 в 06:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: