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

Java中ResultSet.getDouble()非预期舍入问题如何解决?

解决ResultSet.getDouble()舍入为整数的问题

这问题我之前排查过类似的,大概率是JDBC驱动或者类型映射的小坑!先给你理清楚可能的原因和解决办法:

核心原因

一般来说,getDouble()返回截断值,而getObject()能拿到正确结果,主要是因为JDBC驱动对特定double数值的解析逻辑有问题——有些旧驱动会错误地把带有小数的double值当作整数处理,或者结果集元数据里的字段类型被驱动误判,导致读取时自动截断。

可行的解决办法

  • 直接用getObject转Double:既然getObject()能拿到正确值,那可以直接用这个方式转换,绕开驱动里有问题的getDouble()实现,代码示例:

    Double correctValue = (Double) rs.getObject("value");
    
  • 用BigDecimal中转后转double:如果担心类型转换的安全性,可以先读取为BigDecimal,再转成double,这种方式对数值的解析更严谨,能避免驱动的截断问题:

    double correctValue = rs.getBigDecimal("value").doubleValue();
    
  • 升级JDBC驱动版本:很多时候这种问题是驱动的bug导致的,比如MySQL Connector/J的某些旧版本就存在类似的double值截断问题。把驱动升级到最新的稳定版,大概率能解决。

  • 检查数据库字段和映射配置:再确认下数据库里的字段是不是真的是double类型(比如有没有被误设为DECIMAL(0)或者整数类型);如果用了ORM框架(比如MyBatis),检查结果映射里是不是把这个字段错误映射成了int/long类型,导致自动舍入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:41:45