在Python中应该如何处理时间戳?

kd3sttzy  于 2022-12-02  发布在  Python
关注(0)|答案(1)|浏览(102)

每当我使用www.example.com _sql_query从sqlite读取浮点数pandas.read时,它就有可能出现轻微的精度错误,所以当我稍后使用不精确的浮点数搜索该行时,它找不到该行。
下面是我用来重现问题的确切过程:
1.在sqlite数据库测试表中创建行

insert into test values ("bc011fcd6c8e40069dd7c7f2fdf92952", 1669836415.8800698)

sqlite test table
1.从测试表中读取行

import sqlalchemy as sa
import pandas as pd
import os

def main():
    file_path = '/path/to/sqlite.db'
    conn_str = f'sqlite:///{file_path}'
    engine = sa.create_engine(conn_str)

    query = 'select * from test WHERE job_id = "bc011fcd6c8e40069dd7c7f2fdf92952" AND modified_on = 1669836415.8800698'
    data = pd.read_sql_query(query, con=engine)
    print(data['modified_on'].iloc[0])  # gives 1669836415.8800697

if __name__ == '__main__':
    main()

我现在使用这个浮点数作为时间戳,以便以后查询。那么我应该如何在python中处理这个浮点数和其他浮点数呢?我应该总是把浮点数四舍五入到6位小数吗?
注意/有趣的观察结果:

print(data['modified_on'].iloc[0]-int(data['modified_on '].iloc[0]))  # gives 0.8800697326660156
uemypmqf

uemypmqf1#

如果可以避免的话,就不要使用浮点数,浮点数的工作原理如下:

>>> print ("%40.18f\n" % (1669836415.8800698))
           **1669836415.880069732666015625  <<<< the actual value**

>>> print ("%40.7f\n" % (1669836415.8800698))
                      **1669836415.8800697  <<<< the rounded value**

相关问题