使用Python从MySQL读取浮点数到字典时丢失小数部分的问题
解决MySQL读取浮点数被截断为整数的问题
我来帮你搞定这个浮点数截断的问题!你遇到的情况大概率是两个核心问题导致的,咱们一步步排查修复:
1. 检查数据库表的字段类型(最关键)
如果你的tp列设置的是INT、TINYINT或者DECIMAL(x, 0)这类无小数位的数值类型,数据库本身就只会存储整数部分——哪怕你插入的是带小数的数值,也会被自动截断。
修复方法:修改字段类型
执行SQL语句把tp列改成支持小数的类型,按需选择:
- 若需要普通精度,用
FLOAT:
ALTER TABLE `test` MODIFY COLUMN `tp` FLOAT;
- 若需要高精度(比如财务类数据),用
DECIMAL(示例保留2位小数,可根据需求调整位数):
ALTER TABLE `test` MODIFY COLUMN `tp` DECIMAL(10, 2);
2. 修正代码中的SQL语法错误
你的代码里写了:
query = ("SELECT * FROM 'test'")
MySQL中表名不能用单引号'包裹(这会被识别为字符串而非表名),正确的写法是用反引号`或者直接省略引号:
query = "SELECT * FROM `test`" # 或者更简单的写法:query = "SELECT * FROM test"
修正后的完整代码示例
import mysql.connector # 替换成你的数据库连接信息 conn = mysql.connector.connect( host="localhost", user="your_username", password="your_password", database="your_database" ) mycursor = conn.cursor(dictionary=True) query = "SELECT * FROM `test`" mycursor.execute(query) tp = {} for row in mycursor: # 字段类型正确的情况下,float()会完整保留小数部分 tp[(row["MDK"], row["JT"])] = float(row["tp"]) # 别忘了关闭连接释放资源 mycursor.close() conn.close() # 测试输出验证结果 print(tp[(1, 1)]) # 应该输出1.9 print(tp[(1, 2)]) # 应该输出1.77
验证结果
修改完字段类型和代码后,重新运行程序,你的字典里就能存储完整的浮点数,不会再被截断为整数了。
内容的提问来源于stack exchange,提问作者Angriffskeule
相关产品推荐
相关产品推荐

