本文共 709 字,大约阅读时间需要 2 分钟。
很少有带小数的浮点数可以精确地表示为二进制浮点数;通常会有一些非常小的错误。有时它会比期望的数字小,有时会更大,但它应该总是非常接近。您的示例的确切值是1391147980.0019989013671875,它与您指定的值相差不到0.1微秒。在
从浮点timestamp到datetime的转换应该使用舍入,以确保往返转换给出的值与原始值相同。正如J.F. Sebastian所指出的,这是作为一个针对python3.4的bug输入的;据称在以后的版本中已经修复了,但是它仍然存在于python3.5.0中,使用的值与问题中给出的值相同。运行一个类似于nigel222的测试显示,精确匹配和低1微秒的结果之间几乎有50/50的差距。在
因为您知道原始值是微秒的整数,所以您可以添加一个偏移量,以确保二进制浮点值始终高于十进制值,同时仍然足够小,以便在正确舍入时不会影响结果。由于舍入应在0.5微秒时发生,理想的偏移量应为该值的一半,即0.25微秒。在
以下是Python 3.5.0中的结果:>>> a = datetime.datetime.timestamp(datetime.datetime(2014, 1, 30, 23, 59, 40, 1999))
>>> b = datetime.datetime.fromtimestamp(a)
>>> a
1391147980.001999
>>> b
datetime.datetime(2014, 1, 30, 23, 59, 40, 1998)
>>> b = datetime.datetime.fromtimestamp(a + 0.00000025)
转载地址:http://jgzct.baihongyu.com/