为什么这个microtime在PHP中显得很奇怪

时间:2009-08-21 04:06:57

标签: php

为什么这个microtime在PHP中显得很奇怪

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

以上显示:
时间4:2.69412994385E-5

具有更复杂,更长时间运行过程的东西显示如下:
时间1:0.000292062759399

4 个答案:

答案 0 :(得分:16)

E-5是科学记数法。当你将它与字符串值连接时似乎会发生。尝试使用number_format ...?

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

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

答案 1 :(得分:15)

将长数字(非常小或非常大)转换为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 :(得分:2)

似乎这个microtime()显得很奇怪,因为PHP有​​一个阈值,在它的两边都显示科学记数法的数字或十进制表示法的数字。这两个在技术上都是“浮动”(see documentation)。

似乎这个阈值介于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 />';

这将始终将时间显示为十进制数。

答案 3 :(得分:0)

别忘了 float

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

更新:附加到最佳答案。