无法获取精确Double值求助:数据库5.0004读取为5.0
解决数据库数值精确获取问题
问题根源
你遇到的问题本质是浮点数类型的精度丢失,以及Java实体与数据库字段的映射配置错误:
Double属于二进制浮点数,无法精确表示十进制小数(比如5.0004),存储和读取时都会丢失精度;- 即便换成
BigDecimal,如果数据库字段类型不对、映射配置没跟上,依然会出现精度丢失。
分步解决方案
修正数据库字段类型
把数据库中tax-rate字段的类型从FLOAT/DOUBLE改成DECIMAL(或NUMERIC),建议定义为DECIMAL(10,4)(总长度10位,保留4位小数),确保数据库层面能精确存储带四位小数的数值。正确配置Java实体映射
将实体字段改为BigDecimal,并通过@Column注解明确精度和刻度,避免ORM框架自动转换出错:@Column(name = "tax-rate", precision = 10, scale = 4) private BigDecimal taxRate;注意:原代码里的
Public是拼写错误,Java中字段修饰符应为小写的public或private。检查ORM框架的映射规则
- 若使用MyBatis:确保ResultMap中该字段的
jdbcType指定为DECIMAL,避免默认转成Double:<result property="taxRate" column="tax-rate" jdbcType="DECIMAL"/> - 若使用JPA(如Hibernate):确认框架没有将数据库
DECIMAL类型自动转换为Double,通过@Column的precision和scale强制映射为精确类型。
- 若使用MyBatis:确保ResultMap中该字段的
全程使用BigDecimal处理数值
代码中不要将BigDecimal转成Double进行计算或展示,直接用BigDecimal的API操作,确保精度不丢失。
内容的提问来源于stack exchange,提问作者Palash Tirpude
相关产品推荐
相关产品推荐

