每当我使用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
1条答案
按热度按时间uemypmqf1#
如果可以避免的话,就不要使用浮点数,浮点数的工作原理如下: