microtime中的PHP Float和Double数据类型()

时间:2013-02-22 15:17:23

标签: php casting microtime

我试图了解各种数据类型如何控制microtime()函数输出的显示方式?

以下是3个场景:

1 。这将以浮动格式显示microtime函数的输出,因为我已将布尔值设置为true。

我想知道,默认情况下浮点函数会显示多少小数位(在这种情况下它是4)?

这与CPU的体系结构有什么关系?

lab$ php -r 'echo microtime(true),"\n";'
1361544317.2586

2 。这里,microtime()函数的输出被转换为double格式。

那么,这是否意味着,它只会显示最多6位小数的微秒?它与float及其最大尺寸/精度有何不同?

lab$ php -r 'echo (double)microtime(),"\n";'
0.751238

3 。这是microtime()函数的默认用法,它会打印微秒和unix纪元时间戳:

lab$ php -r 'echo microtime(),"\n";' output: 0.27127200 1361544378

我想理解这一点,因为在很多地方我都看到microtime()用于以这种方式为mt_rand()PRNG生成种子:

mt_srand((double)microtime() * 1000000)

在这里使用类型转换有什么用,乘以10 ^ 6? mt_srand()的参数的最大可能值是多少?

感谢。

1 个答案:

答案 0 :(得分:0)

浮点数有一个问题:您可以使用大数字或高浮点精度。此问题不适合大量秒(自1970/1/1以来的秒数)和高精度 - 微秒的问题。


PHP尝试通过将时间戳的浮点部分和自纪元以来的完整秒数作为字符串中的两个分隔值返回来尝试解决该问题。

对于精度不太重要的情况,PHP还支持将时间戳作为浮点值返回,舍入到最接近的微秒。在我的系统中,准确度是你的例子中的10.000秒。我不知道这是否被批准。

来自PHP手册的引用:

  

默认情况下,microtime()以“msec sec”的形式返回一个字符串,其中sec是自Unix纪元(1970年1月1日0:00:00 GMT)以来的秒数测量的当前时间,以及msec是自秒以来以秒为单位经过的微秒数。

     

如果get_as_float设置为TRUE,则microtime()返回一个浮点数,表示自Unix纪元精确到最接近的微秒以来的当前时间(以秒为单位)。

这意味着,如果您需要最准确的精度,则应使用microtime()而不使用参数get_as_float,然后使用字符串和/或bc_math操作创建最终时间戳。