1

psycopg2 を使用して float を 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 に答える