This question already has answers here:
Get POSIX/Unix time in seconds and nanoseconds in Python?
(6个答案)
2年前关闭。
我需要使用nanosec的当前时间。
字符串
如果尝试与int
float_time:1502872986.6536937
int_nano_time:1502872986653693696
str_nano_time:1502872986.653693676
解:
float_time:536596.296
int_nano_time:536596296000000
str_nano_time:536596.296000000
这两个浮点数的十六进制表示形式有很大不同:
至于
您的错误为20纳秒,但是在我的计算机上,从
(6个答案)
2年前关闭。
我需要使用nanosec的当前时间。
字符串
"%.9f" % float_time
为1502872986.653693676。您可以在末尾看到76。如果尝试与int
int(float_time*10**9)
同时写入,则末尾将为1502872986653693696和96。为什么?而获得纳米格式的正确方法是什么?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
最佳答案
两者在IEEE754双精度(〜15.7个十进制数字)内都是正确的。原因是不能精确产生十的倍数,因此乘以2 ** 10
是精确的,而乘以5 ** 10
将再次产生舍入误差,这就是最后一个数字不同的原因。
'1502872986.653693675994873046875000000000'
>>> "%.30f" % (1502872986.653693676 * 10 ** 9)
'1502872986653693696.000000000000000000000000000000'
这两个浮点数的十六进制表示形式有很大不同:
>>> (1502872986.653693676 * 10 ** 9).hex()
'0x1.4db4704d00617p+60'
>>> (1502872986.653693676).hex()
'0x1.6650166a9d61ep+30'
至于
time()
调用返回的时间-很有可能计算机应该有一个计时器来提供足够高的精度的时间戳,在time()
被调用的确切时间和返回之间的任何时间值:>>> (time() - time()) * 10 ** 9
-715.2557373046875
>>> (time() - time()) * 10 ** 9
-953.67431640625
>>> (time() - time()) * 10 ** 9
-953.67431640625
您的错误为20纳秒,但是在我的计算机上,从
time()
调用返回的两个连续时间戳之间的时间差为700-100纳秒。关于python - 字符串和整数格式的浮点数差异。为什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45709564/
10-12 05:46