You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:16:58