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

无法获取精确Double值求助:数据库5.0004读取为5.0

解决数据库数值精确获取问题

问题根源

你遇到的问题本质是浮点数类型的精度丢失,以及Java实体与数据库字段的映射配置错误:

  • Double属于二进制浮点数,无法精确表示十进制小数(比如5.0004),存储和读取时都会丢失精度;
  • 即便换成BigDecimal,如果数据库字段类型不对、映射配置没跟上,依然会出现精度丢失。

分步解决方案

  1. 修正数据库字段类型
    把数据库中tax-rate字段的类型从FLOAT/DOUBLE改成DECIMAL(或NUMERIC),建议定义为DECIMAL(10,4)(总长度10位,保留4位小数),确保数据库层面能精确存储带四位小数的数值。

  2. 正确配置Java实体映射
    将实体字段改为BigDecimal,并通过@Column注解明确精度和刻度,避免ORM框架自动转换出错:

    @Column(name = "tax-rate", precision = 10, scale = 4)
    private BigDecimal taxRate;
    

    注意:原代码里的Public是拼写错误,Java中字段修饰符应为小写的public或private。

  3. 检查ORM框架的映射规则

    • 若使用MyBatis:确保ResultMap中该字段的jdbcType指定为DECIMAL,避免默认转成Double:
      <result property="taxRate" column="tax-rate" jdbcType="DECIMAL"/>
      
    • 若使用JPA(如Hibernate):确认框架没有将数据库DECIMAL类型自动转换为Double,通过@Column的precision和scale强制映射为精确类型。
  4. 全程使用BigDecimal处理数值
    代码中不要将BigDecimal转成Double进行计算或展示,直接用BigDecimal的API操作,确保精度不丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:02:35