我在“.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。
答案 0 :(得分:2)
您应该使用带有最大小数点数的字符串格式。
print '%.10f' % a['RA_touse'][0]
答案 1 :(得分:0)
当你使用浮点值时,你必须记住你在基数10(通常)的代码或应用程序接口中编写它们,但是它们存储在基数2中。对于整数值也是如此,但这不是问题,因为所有整数都可以在任何基础上准确表示。这里有一些小数>二进制转换示例来显示问题。
dec bin
.1 .000110011(0011 repeating)
.2 .0011(r)
.25 .01
.3(r) .01(r)
.5 .1
在基数10中易于表示的值在基数2中并不总是有限地表示。The Decimal
object专门用于满足维护浮点运算的小数精度的需要。
答案 2 :(得分:0)
我发现问题是字符串转换。最后,我将所有内容转换为字符串,以格式化POSTGRESQL的所有内容。如果我做
values = [repr(vaue) for value in values]
上传的值是正确的。
感谢您的帮助!