Hibernate 使用Projections.sum发生精度问题

项目中需要计算金额总数,使用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

数据库截图

img