Andreas_G 2021-12-16 18:22 采纳率: 100%
浏览 8
已结题

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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月24日
    • 创建了问题 12月16日

    悬赏问题

    • ¥15 关于#DMA固件#的问题,请各位专家解答!
    • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
    • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
    • ¥20 微信小程序 canvas 问题
    • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
    • ¥15 怎么把512还原为520格式
    • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
    • ¥15 求高通平台Softsim调试经验
    • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
    • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图