Hibernate在PostgreSQL上执行sum函数导致数据失真的问题
来源:互联网 发布:优酷福利待遇 知乎 编辑:程序博客网 时间:2024/06/05 05:21
有一段通过Hibernate从PostgreSQL上进行sum统计的简单代码,但统计结果却导致数据失真,不知原因何在,求指教!
Java代码片段如下:
public List<Object> getSalesRanking( ) throws Exception{ StringBuilder sbHql = new StringBuilder(); sbHql.append("select dl.dishId, dl.dishName, sum(dl.counts) as t, sum(dl.price) as s from R311dishList dl ") .append(" where dl.dishName='松仁玉米'") .append(" group by dl.dishId, dl.dishName"); String hql = sbHql.toString(); SQLQuery query = sf.getCurrentSession().createSQLQuery(hql); query.addScalar("dishId", StandardBasicTypes.STRING); query.addScalar("dishName", StandardBasicTypes.STRING); query.addScalar("t", StandardBasicTypes.DOUBLE); query.addScalar("s", StandardBasicTypes.DOUBLE); List<Object> list = new ArrayList<Object>(); ScrollableResults rs = query.scroll(); while(rs.next()){ try{ Object[] obj = new Object[4]; obj[0] = rs.getString(0); obj[1] = rs.getString(1); obj[2] = rs.getDouble(2); obj[3] = rs.getDouble(3); list.add(obj); } catch(Exception ex){ String err = ex.toString(); throw ex; } } return list;}
对应的数据库表R311DishList中相关数据如下:
请注意,要统计的counts字段的数据分别是2.4/2.3/2.6,counts字段是double类型的,按道理sum(counts)后的结果应该是7.3,且通过SQL直接在数据库上执行的结果也确实是7.3,如下图:
可是,通过代码执行得到的结果却是7.299999999999999:
修改数据库中三条记录的counts值为其他值均正常,且偶尔调整三条记录的顺序后也能正常显示。不知何故??
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- Hibernate在PostgreSQL上执行sum函数导致数据失真的问题
- 使用StretchBlt函数导致位图失真的解决方案
- 解决使用CImage类的Draw函数在显示图片时引起的图像失真问题
- 在Predix上创建PostgreSQL数据服务
- hibernate占位符的问题导致无法执行带变量的mysql sql语句
- Hibernate占位符的问题导致无法执行带变量的mysql sql语句
- 有感于SQL Server 的Sum函数的数据截取问题
- PostgreSQL执行pg_stop_backup()问题
- Hibernate懒加载问题导致View层无法获取关联数据的问题
- 解决slideDown()、slideUp()执行结束后才执行下一次,导致鼠标离开后很久动画依然在执行的问题
- 【Hibernate】[BUG] 执行save()之后,这次的数据会覆盖上一次的数据
- postgresql在win上的安装
- PostgreSQL在Linux上的恢复
- postgreSQL在redhat上的源码安装
- benchmarksql在postgresql上的安装、使用
- postgreSQL在Windows上的基本操作
- vcenter postgresql 空间满,导致无法启动问题的处理。
- hibernate与jdbc在插入数据上的速度对比
- hdu1085 Holding Bin-Laden Captive!
- 如何在Eclipse中看Android的源码
- Linux内核scripts/Makefile.build文件结构
- 第13章习题 复制控制
- poj 2184 Cow Exhibition 01背包变形,正负背包
- Hibernate在PostgreSQL上执行sum函数导致数据失真的问题
- resource.h student.cpp student.h
- 新的Mac Mini开发前的准备工作
- 下一代云计算平台--融合基础设施
- Commons BeanUtils的使用
- TF-IDF与余弦相似性的应用(一):自动提取关键词
- WCF 项目应用连载[11] - 结束
- HDU1561 The more,The better
- JVM的简单介绍