我试图了解各种数据类型是如何控制microtime()函数的输出方式的?
以下是3种情况:
1。这将以浮动格式显示microtime函数的输出,因为我已经将布尔值设置为true。
我想知道,默认情况下,浮点数函数会显示多少位小数(在本例中是4位)?
这与CPU的体系结构有什么关系?
lab$ php -r 'echo microtime(true),"\n";'
1361544317.25862。在这里,microtime()函数的输出被类型转换为双重格式。
那么,这是否意味着,它只会显示6位小数点以下的微秒呢?它与浮点数和最大尺寸/精度有什么不同?
lab$ php -r 'echo (double)microtime(),"\n";'
0.7512383。这是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()参数的最大可能值是多少?
谢谢。
发布于 2013-02-22 15:44:34
浮点数有一个问题:可以是大数字,也可以是高浮点精度。这个问题不适合大量秒(自1970/1/1年以来的秒数)和高精度-微秒的问题。
PHP试图通过返回时间戳的浮点部分和自该时代以来的完整秒数作为字符串中两个分隔的值来解决这个问题。
对于精度不太重要的情况,PHP还支持将时间戳作为浮点数返回,舍入到最近的微秒。在我的系统中,精度是十分之一的第二个,就像你的例子一样。我不知道这是否被批准了。
引用PHP手册:
默认情况下,microtime()返回表单"msec“中的字符串,其中sec是自Unix时代(1970年GMT,0:00:00:00)以来以秒为单位的当前时间,而msec是从秒开始已过的微秒数(以秒为单位)。 如果get_as_float设置为TRUE,则microtime()返回一个浮点,它表示自Unix时代精确到最近的微秒以来的当前时间(以秒为单位)。
这意味着,如果您需要最精确的精度,则应该使用不带param get_as_float的get_as_float,然后使用字符串和/或bc_math操作创建最后的时间戳。
https://stackoverflow.com/questions/15027299
复制相似问题