【发布时间】:2013-04-30 15:20:18
【问题描述】:
我在“.fits”表中有一个存储值(这应该没有问题)。 我读了表,然后做
In [2]: a['RA_touse'][0]
Out[2]: 161.65813
这是真正的存档值。但是,我会这样做:
In [3]: print a['RA_touse'][0]
161.658
我得到一个截断的值。我将 python 与 POSTGRES 一起使用,这种行为会带来一些精度问题。
谁能向我解释这种行为,以及如何解决它?我需要我的数据保持相同的格式,而不是更改它(即,repr() 函数会将所有内容都转换为字符串)。
非常感谢!
为清楚起见进行编辑:
我正在使用 python 脚本来创建数据库。我要做的是
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 中的值存储为数字类型,而不是字符串?
-
用这个脚本填充数据库,然后反向使用它来获取值。一些值是字符串(如引用),但另一些是数字类型,必须保留,以便 python 从数据库中获取它们时可以正常使用它们。 (也许不是,我从数据库操作开始)
标签: python postgresql truncation