ibatis 执行查询,将结果映射到java 对象时,浮点数精度变了?

胡思乱想 发布于 2013/04/27 22:12
阅读 1K+
收藏 0
如题,数据库是mysql,表中金额的字段用的都是decimal(10,2),类型,对应的java bean 用的是Double,但是有时候就会有精度问题,比如数据库中存的是0.2,转化到java  object就是0.20000000298023224,请问有什么好的解决方法没?我想到的一种解决方案,就是将金额字段解析为String,在需要运算的时候转化为BigDecimal,请教各位osc大侠,是否有更好的方案呢?

加载中
0
魔力猫
魔力猫
Java Bean里面就是BigDecimal,不用你自己转。JDBC就可以帮你转了。
魔力猫
魔力猫
回复 @xmut : 既然是计算数字,那么什么时候都不应该是字符串,而是BigDecimal。页面显示有的是格式化标签,根本不需要你自己折腾。
xmut
xmut
他的意思应该是前台显示时用字符串,后台保存时将其转换成BigDcimal
0
胡思乱想
胡思乱想

引用来自“魔力猫”的答案

Java Bean里面就是BigDecimal,不用你自己转。JDBC就可以帮你转了。

直接用BigDecimal 我已经试过了,不行,还是会有误差 ,BigDecimal如果从String构造,如BigDecimal bd = new BigDecimal("123.12"); 不会有误差,但是从double或者float构造就会有误差,如BigDecimal bd1 = new BigDecimal(123.12);  ,jdbc应该就是从double构造的,所以还是有误差


胡思乱想
胡思乱想
我的意思就是说 mysql数据库表字段用的是decimal,对应的class中的字段用的是 BigDecimal,使用ibatis转化时,还是有误差
魔力猫
魔力猫
你的数据库驱动转换BigDecimal是从浮点数转换的?
0
ALOSIN
ALOSIN
应该直接用string,避免一切误差,
胡思乱想
胡思乱想
嗯咯,目前的方案就是这么搞的
0
R-Lu
R-Lu

引用来自“蒋伟”的答案

应该直接用string,避免一切误差,

这个当然是一个折中方案,还要相互转化,相信这个在最新的Mysql JDBC中应该修正过来吧.

不过好像Hibernate倒是没有出现这种情况.

返回顶部
顶部