我已经在一些代码上工作了好几天了,说实话,我还没有留下太多的头发......我已经搜遍了包括stackoverflow在内的任何地方,我似乎无法做任何事情匹配我的困境。
我在Mint 17.3上使用python 2.7.6。 我需要使用日期/时间至少毫秒精度。在整秒内处理日期和时间是相当微不足道的,但当你以毫秒或微秒投掷时,它将成为一个完全不同的球赛。最后,我需要迭代一个日志文件,并根据某些条件,我需要找到两行的日期/时间之间的差异,至少精确到毫秒。在这种仓库输送机情况下,服务器,PLC和扫描仪都涉及到精确度。日志文件日期/时间的格式如下:
12-Apr-2016 23:59:59.720321
我认为解决这个问题的最简单方法是将字符串转换为时间戳,然后再添加微秒。我也不太确定我在这种情况下使用strptime,因为我知道timetuple()无论如何都会剥离任何分数,因此对需求是过剩的。
无论如何,经过多次,多次尝试和几天后,我的代码到目前为止仍在下面:
def timestampthen(timestring):
tt = datetime.datetime.strptime(timestring, "%d-%b-%Y %H:%M:%S.%f").timetuple()
ut = float(calendar.timegm(tt))
dotpos = timestring.rfind(".")
frac = float(timestring[dotpos:])
utfloat = float(ut + frac)
return utfloat
在一个例子中,ut = 1460505599.0和frac = 0.720321,但utfloat = 1460505599.72
我知道我可以使用格式和%f,但我正在使用浮点数而不是字符串。 上面的代码工作正常,但为什么浮点数在6或更大时会以2位小数精度返回?我需要更多。 我希望得到一些指导,指出我正确的方向。
答案 0 :(得分:3)
实际存在全精度,因此算术没有问题。
问题在于,默认情况下,print
会显示变量的舍入 str 而不是其完整精度 repr :
>>> ut = 1460505599.0; frac = 0.720321;
>>> ufloat = ut + frac
>>> print str(ufloat)
1460505599.72
>>> print repr(ufloat)
1460505599.720321
因此,问题的解决方案就是打印浮点值的 repr ,这样它就会显示为完全精确。希望这会有所帮助: - )