为什么这个microtime在PHP中显得很奇怪
$start4 = microtime(true);
// run some php code
$end4 = microtime(true);
print "Time4: ". ($end4 - $start4)."<br />";
以上显示:
时间4:2.69412994385E-5
具有更复杂,更长时间运行过程的东西显示如下:
时间1:0.000292062759399
答案 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 );
------------------^
更新:附加到最佳答案。