如何使用psycopg2绑定双精度类型

1 投票
1 回答
1579 浏览
提问于 2025-04-15 22:34

我正在尝试使用psycopg2将一个浮点数绑定到PostgreSQL的双精度类型。

ele = 1.0/3.0
dic = {'name': 'test', 'ele': ele}
sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele)s)'''

cur = db.cursor()
cur.execute(sql, dic)
db.commit()

sql = """select elevation from waypoints where name = 'test'"""
cur.execute(sql_out)
ele_out = cur.fetchone()[0]

ele_out
0.33333333333300003
ele
0.33333333333333331

显然,我并不需要那么高的精度,但我希望能够简单地比较这些值。我可以使用struct模块把它保存为字符串,但我觉得应该有更好的方法。谢谢!

1 个回答

0

你遇到这个问题的原因是因为这行代码:

sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele)s)'''

因为在这里,当浮点数被转换成字符串时,你并没有得到你期待的所有数字。例如,

str(ele)

会产生

'0.333333333333'

把这一行改成

sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele).17f)'''

我相信这样会给你想要的结果,因为

'%(ele).17f' % dic

会产生

'0.33333333333333331'

撰写回答