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

Pandas read_sql_query读取超过6位浮点数转int丢失小数问题求助

故障排查及解决方法

  • 首先修正SQL语句的语法错误:你写的CAST查询两个字段之间缺少逗号,会导致SQL执行异常,返回的字段不符合预期。首先修正语法,同时建议优先使用DECIMAL而非FLOAT做类型转换,避免浮点精度损失:
import pandas as pd
import numpy as np

sql = """
SELECT 
    CAST(Voucher AS DECIMAL(18, 2)) AS Voucher,
    CAST(Payed AS DECIMAL(18, 2)) AS Payed
FROM Database1
"""
df = pd.read_sql_query(sql, conn)
  • 如果上述方案无效,说明是数据库驱动的默认转换逻辑提前截断了小数部分,此时可以先将字段以字符串形式读出,再手动转换为浮点类型:
sql = """
SELECT 
    CAST(Voucher AS CHAR) AS Voucher,
    CAST(Payed AS CHAR) AS Payed
FROM Database1
"""
df = pd.read_sql_query(sql, conn)
df[['Voucher', 'Payed']] = df[['Voucher', 'Payed']].astype(np.float64)
  • 额外检查点:如果打印全表时看不到小数,但取单个单元格数值时有小数,说明是pandas的显示配置问题,修改显示参数即可:
pd.set_option('display.float_format', lambda x: '%.2f' % x)
  • 注意使用dtype参数前需确保已经正确导入numpy库,否则参数指定不生效。

内容的提问来源于stack exchange,提问作者pythonrookie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:45:00