首页 > 解决方案 > MariaDB中使用python mysql连接器的浮点精度

问题描述

我是 python 和 MariaDB 的新手,想知道我所有的 MariaDB 表中的所有浮点类型都缺乏精度。这是一个示例:我在 MariaDB 中创建了一个表,其中包含四种不同的数据类型 float、double、decimal 和 int:

CREATE TABLE test(
   id INT,
   foo float,
   bar double,
   foo2 decimal(19,5),
   bar2 int,
   PRIMARY KEY( id )
)

现在我在每个字段中插入并读出相同的数字(1234567.891):


cx = mysql.connector.connect(user='root', password='ABC',
                                         host='192.168.0.107',
                                         database='DEF')
query= "INSERT INTO test (foo, bar, foo2, bar2) VALUES (%s, %s, %s, %s)"
writtenvalues = (1234567.891, 1234567.891, 1234567.891, 1234567.891)
csr = cx.cursor()
csr.execute(query, writtenvalues)
cx.commit()
query= "SELECT * FROM test"
csr.execute(query)
readvalues = csr.fetchall()
print(readvalues)
csr.close()
cx.close()

我得到以下结果:

[(0, 1234570.0, 1234567.891, Decimal('1234567.89100'), 1234568)]

我很惊讶第一个数字(foo)应该是一个浮点数,结果是 1234570.0(四舍五入到下一个 10!)。它甚至不如整数 (bar2) 准确。只有 double 类型是准确的。有没有一种简单的方法可以提高浮点型的精度,还是需要将它们全部更改为双精度?

标签: pythonmysqlfloating-pointconnector

解决方案


推荐阅读