1

我正在尝试使用 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 模块并将其保存为字符串,但认为应该有更好的方法。谢谢

4

1 回答 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'
于 2010-05-10T21:53:05.037 回答