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

问题描述 投票:8回答:4

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

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

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

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

php
4个回答
16
投票

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

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

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

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
投票

似乎这个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 />';

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


0
投票

别忘了float

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

更新:附加到最佳答案。

© www.soinside.com 2019 - 2024. All rights reserved.