У меня есть сохраненное значение в таблице «.fits» (с этим не должно быть никаких проблем). Я прочитал таблицу и сделатьPython различное значение при печати и чтении
In [2]: a['RA_touse'][0]
Out[2]: 161.65813
Это реальная архивируются значение. Однако, тогда я:
In [3]: print a['RA_touse'][0]
161.658
Я получаю усеченное значение. Я использую python вместе с POSTGRES, и это поведение дает некоторые проблемы с точностью.
Может ли кто-нибудь объяснить это поведение мне и как его решить? Мне нужно, чтобы мои данные сохранялись в том же формате, но не меняли его (т. Е. Функция repr() превратила бы все в строки).
Большое спасибо!
Редактировать для ясности:
Я использую сценарий питона для создания базы данных. Что я делаю, это
con = psycopg2.connect('todatabase')
cur = con.cursor()
for i in vector_of_something:
value1 = table['column1'][i]
value2 = table['column2'][i]
values = (values1,values2)
values = [str(value) for value in values]
command = 'INSERT INTO table values (%s,%s)'
cur.execute(command,values)
con.commit()
Проблема заключается в том, что я получаю «161,658» в базе данных в результате, вместо 1.65813.
Какие типы данных вы используете, как в Python, так и в DB? Вы потеряете точность, пытаясь работать с десятичными представлениями для значений с плавающей запятой. Кроме того, есть усечение, которое происходит, когда число отформатировано для печати, что фактически не отражает потерю точности хранимого значения. –
В этом случае я использую поплавки. У меня есть что-то вроде: value = a ['RA_touse'] [0], а затем преобразовать его в строку и загрузить его в postgresql –
После редактирования. Почему вы не храните значения в POSTGRES в виде числовых типов, а не строк? – Shane