项目中需要计算金额总数,使用Projections.sum计算总体金额,数据库中数据全部为精确到小数点后三位,第三位一般为0,但是在使用Projections.sum后查出来的精度高的可怕。
不知道这是什么情况。
还有一个需求是返回金额总数就行,但是不知道是返回削去精度的String还是float选取后三位的好。
Dao方法
/**
* 查询金额总数
* @param createTimeBegin 开始时间
* @param createTimeEnd 结束时间
* @return 金额总数
*/
public String findDecoctionAmountSumByTime( String createTimeBegin, String createTimeEnd) throws Exception {
Criteria criDecoctionOrderCount = getSession().createCriteria(TbDecoction.class);
if (!StringUtils.isEmptyOrNull(createTimeBegin)) {
criDecoctionOrderCount.add(Restrictions.ge("createTime", DateUtils.stringToDate(createTimeBegin)));
}
if (!StringUtils.isEmptyOrNull(createTimeEnd)) {
criDecoctionOrderCount.add(Restrictions.lt("createTime", DateUtils.nDaysAfterOneDateString(createTimeEnd, 1)));
}
criDecoctionOrderCount.setProjection(Projections.sum("amount"));
String sum = (String)criDecoctionOrderCount.list().get(0);
return sum;
}
StringUtils.isEmptyOrNull 是项目中已经写好的工具类,判断是否为空的,不必在意
test
System.out.println(decoctionDao.findDecoctionAmountSumByTime("",""));
控制台输出
492424.50939941406
Process finished with exit code 0
数据库截图