【发布时间】:2017-08-16 09:14:00
【问题描述】:
我需要纳秒的当前时间。
作为字符串"%.9f" % float_time,它是1502872986.653693676。你可以在最后看到 76。
如果我尝试与 int int(float_time*10**9) 写入相同的时间,那么最后将是 1502872986653693696 和 96。为什么?获取 nano 格式的正确方法是什么?
from time import time
float_time = time()
print("float_time:", float_time)
int_nano_time = int(float_time*10**9)
print("int_nano_time:", int_nano_time)
str_nano_time = "%.9f" % float_time
print("str_nano_time:", str_nano_time)
float_time: 1502872986.6536937
int_nano_time: 1502872986653693696
str_nano_time:1502872986.653693676
解决方案:
time.monotonic()
float_time: 536596.296
int_nano_time: 536596296000000
str_nano_time: 536596.296000000
【问题讨论】:
-
python uses IEEE-754 double precision,因此有效位只有 53 位,大约是 15-17 个十进制数字(1502872986.6536936 有 17 个有效数字,其余只是噪声)
-
@Elena 返回的
time()很可能不正确到纳秒精度。 -
@AnttiHaapala 是否有可能在 python 的 int 中获得 nanosec?在 C++ 世界中,他们没有问题,因为他们得到了 64 位整数。它们不符合 IEEE754。
-
@Elena 正如我试图解释的那样,如果你使用
time()返回的时间,它的精度并不重要,因为 both 瞬间 1502872986653693696 和 15028729866536937 发生了 而time()函数正在获取时间戳并将时间戳转换为浮点对象等。
标签: python python-3.x precision floating-accuracy nanotime