Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
microtime()中的PHP浮点和双数据类型_Php_Casting_Microtime - Fatal编程技术网

microtime()中的PHP浮点和双数据类型

microtime()中的PHP浮点和双数据类型,php,casting,microtime,Php,Casting,Microtime,我试图了解各种数据类型是如何控制microtime()函数的输出显示方式的 以下是3种情况: 1。这将以浮动格式显示microtime函数的输出,因为我已将布尔值设置为true 我想知道,在默认情况下,float函数将显示多少个小数位(在本例中为4) 这与CPU的体系结构有什么关系 lab$ php -r 'echo microtime(true),"\n";' 1361544317.2586 2。这里,microtime()函数的输出被类型转换为双精度格式 那么,这是否意味着它最多只能显示6

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

以下是3种情况:

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

我想知道,在默认情况下,float函数将显示多少个小数位(在本例中为4)

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

lab$ php -r 'echo microtime(true),"\n";'
1361544317.2586
2。这里,microtime()函数的输出被类型转换为双精度格式

那么,这是否意味着它最多只能显示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()参数的最大可能值是多少


谢谢。

浮点数有一个问题:可以是大数,也可以是高浮点数精度。此问题不适用于大量秒数(自1970/1/1以来的秒数)和高精度微秒的问题


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

对于精度不太重要的情况,PHP还支持将时间戳作为浮点值返回,四舍五入到最接近的微秒。在我的系统中,精度为10.000秒,如您的示例所示。我不知道这是否被允许

引自PHP手册:

默认情况下,microtime()以“毫秒-秒”的形式返回一个字符串,其中秒是自Unix纪元(1970年1月1日格林威治标准时间0:00:00)以来以秒为单位测量的当前时间,而毫秒是自秒以来经过的微秒数,以秒为单位

如果将get_as_float设置为TRUE,则microtime()返回一个float,它表示自Unix纪元以来的当前时间(秒),精确到最近的微秒

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