Как связать двойную точность с помощью psycopg2 - PullRequest
1 голос
/ 11 мая 2010

Я пытаюсь привязать float к postgresql двойной точности, используя psycopg2.

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 голосов
/ 11 мая 2010

Причиной возникновения этой проблемы является следующая строка кода:

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'
...