我想生成自 unix 纪元以来当前纳秒数的十六进制。 (不需要正确,只要精确)

以下是在 bash 中获取当前纳秒的方法:

ksoviero@ksoviero-Latitude-E7440:~$ date +%s%N
1401993044859711108

现在,要将其转换为十六进制,我们使用 printf :
ksoviero@ksoviero-Latitude-E7440:~$ printf '%x\n' $(date +%s%N)
1374e157ee379028

看到那是多么容易吗?

现在,让我们尝试用 Python 做同样的事情。首先,我们得到当前的纳秒:
>>> from time import time
>>> print int(time() * 10**9)
1401993206893091840

现在,我们将其转换为十六进制:
>>> print format(int(time() * 10**9), 'x')
1374e172f90a6400

我……什么!?最后那两个零是从哪里来的? 他们一直都在,他们不应该……

好吧,等等,也许 Python 的十六进制函数无法处理那么大的数字。如果我们只是复制和粘贴纳秒会发生什么?
>>> print format(1401993044859711108, 'x')
1374e13f086e6e84

等等,成功了!?

有人想猜猜发生了什么吗? 为什么它在直接给出时正确十六进制纳秒,但当它是函数的结果时却没有?

最佳答案

因为 time.time() 返回了一个浮点数,而数学运算会导致精度错误。

关于python - GNU 日期和 Python 时间模块之间测量纳秒的不同结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24067767/

10-12 21:52