腾讯云海外购

PHP的microtime()函数 & 浮点数显示精度

咳咳,我一直对这个函数的命名挺纠结的,明明返回的是秒,非要在名字带个micro,总让我以为返沪的是微秒(microseconds)。

其实这个函数的功能是返回带微秒的时间,PHP中声明如下:

mixed microtime ([ bool $get_as_float = FALSE ] )

关于返回值,文档中是这样描述的

By default, microtime() returns a string in the form "msec sec", where sec is the number of seconds since the Unix epoch (0:00:00 January 1,1970 GMT), and msec measures microseconds that have elapsed since sec and is also expressed in seconds.

If get_as_float is set to TRUE, then microtime() returns a float, which represents the current time in seconds since the Unix epoch accurate to the nearest microsecond.

也就是说,如果不加参数TRUE,那么返回的是"msec sec"这样的形式,其中msec也就是用秒表示,也就是说是小数形式的秒。

如果加上参数TRUE,就更好理解喽,就是带小数的秒喽。

让我们写段简单的代码看一下

<? $mt=microtime(); $mt_f=microtime(true); var_dump($mt); var_dump($mt_f); ?>

输出如下:

可是为何浮点数形式表示的秒,小数点后边只有两位啊?这还怎么精确到微秒啦?其实这只是由于浮点数显示精度设定导致的,并不影响运算(比如求时间差值)精度。

如果想让其更高精度的显示,可以试试如下代码:

<? echo ini_get("precision"), "\n"; ini_set("precision",16); $mt=microtime(); $mt_f=microtime(true);  var_dump($mt); var_dump($mt_f); ?>

输出如下:

可见之前默认的浮点数显示精度为12位,我们设置为16位后,就显示到小数点后6位啦。

好了,就啰嗦这些啦,其实我本来想多啰嗦一些的,可是浏览器崩溃了,这些都是我重新敲的,这心情啊,可酸爽了。