BigDecimal 与 doubleValue 的使用 ,以及四舍五入

/**
     * 保存发票信息
     * @param controller
     * @return
     * @throws ParseException
     * @throws ActiveRecordException
     */
    @Before(Tx.class)
    public boolean addInvoice(QhyfController controller) throws Exception{
        BizInvoiceInfo bizInvoiceInfo = new BizInvoiceInfo();
        //参数获取
        String uuid = controller.getPara("uuid");
        boolean isTrue = false;
        String payId = controller.getPara("pay");
        StringTools.isNotBlank(payId);
        if (this.maxHisId(payId)==0) {
            //履历表没有数据时,更新前,保存一次履历
            saveHistoryInfo(payId, controller);
        }
        String invoiceNo = controller.getPara("invoiceNo");
        String checkResult = controller.getPara("checkResult");
        String invoiceMemo = controller.getPara("invoiceMemo");
        String originalInvoiceNo = controller.getPara("originalInvoiceNo");
        String invoiceName = controller.getPara("invoiceName");
        BigDecimal invoiceNoTaxAmount =null;
        String checkCode = controller.getPara("checkCode");
        String invoiceType = controller.getPara("invoiceType");
        String invoiceCode = controller.getPara("invoiceCode");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//需求变更,菜单修改发票信息,可不选开票日期 2016/09/24 黎旭 START
        Date invoiceDate =null;
        if(StringUtils.notBlank(controller.getPara("invoiceDate"))){
            invoiceDate = format.parse(controller.getPara("invoiceDate"));    
        }
//        Date invoiceDate = format.parse(controller.getPara("invoiceDate"));
//需求变更,菜单修改发票信息,可不选开票日期 2016/09/24 黎旭 END
//需求变更,新增,修改发票信息发票金额和应收账款金额可以为空, 2016/09/26 刘果 START
        BigDecimal invoiceAmount = null;
        BigDecimal accountReceivable = null;
        String invoiceAmountTmp = controller.getPara("invoiceAmount");
        String accountReceivableTmp = controller.getPara("accountReceivable");
        String invoiceNoTaxAmountTmp =  controller.getPara("invoiceNoTaxAmount");
        if (StringUtils.notBlank(invoiceAmountTmp)) {
            // 发票金额不为空
            invoiceAmount = new BigDecimal(invoiceAmountTmp.replace(",", ""));
        } else {
            //
        }
        if (StringUtils.notBlank(accountReceivableTmp)) {
            // 应收账款金额不为空
            accountReceivable = new BigDecimal(accountReceivableTmp.replace(",", ""));
        } else {
            //
        }
        if (StringUtils.notBlank(invoiceNoTaxAmountTmp)) {
            // 应收账款金额不为空
            invoiceNoTaxAmount = new BigDecimal(invoiceNoTaxAmountTmp.replace(",", ""));
        } else {
            //
        }
        
        // 发票金额、应收账款金额 不为空时
        if (invoiceAmount != null && accountReceivable  != null ) {
            // 发票应收账款金额  accountReceivable 四舍五入
            double resultInvoiceAccountReceivableB = accountReceivable.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
            // 获取发票金额 invoiceAmount  四舍五入
            double resultInvoiceAmountB = invoiceAmount.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
            
            List<String> para = new ArrayList<String>();
            //根据发票号和付款确认书编号查询当前发票已抵扣金额合计
            para.add(invoiceNo);
            para.add(payId);
            String sql="CALL invoice_deduction_amount(?,?) ";
            // 执行SQL
            Record record = Db.findFirst(sql, para.toArray());
            // 当前发票已抵扣金额
            BigDecimal invoiceAmountCall = null;
            // 获取发票已抵扣金额
            if(record!=null){
                invoiceAmountCall = record.getBigDecimal("accountReceivable");
            }
            // 发票剩余可用抵扣金额
            double deductibleAmountAvailable = resultInvoiceAmountB ;
            // 发票已抵扣金额不为空
            if (invoiceAmountCall != null ) {
                //  发票剩余可用抵扣金额 = 发票金额 - 当前发票已抵扣金额 
                deductibleAmountAvailable = resultInvoiceAmountB - invoiceAmountCall.doubleValue();
            }
            // 该发票的应收账款金额不能大于发票剩余可用抵扣金额(已抵扣金额【%s】)
            AssertUtils.isTrue(resultInvoiceAccountReceivableB <= deductibleAmountAvailable, AlertUtils.getErrMsgWithCode("ME414E015",invoiceAmountCall == null ? 0 : invoiceAmountCall.doubleValue()));
        }
    
        if (!StringUtils.isBlank(uuid)) {
            //更新
            StringTools.isNotBlank(uuid);
            if(!originalInvoiceNo.equals(invoiceNo)){
                //查询是否存在相同发票
                Record sameInvoiceRecord = null;
                String sameInvoiceSql = String.format(
                        " SELECT"
                        + " a.uuid,a.invoice_no"
                        + " FROM %s a"
                        + " WHERE a.sys_status = %s AND"
                        + " a.invoice_no = ? AND"
                        + " a.pay_id = ? ",
                        BizInvoiceInfo.dao.getTable().getName(), 
                        BlConstant.SYS_STATUS_VALUE);
                sameInvoiceRecord = Db.findFirst(sameInvoiceSql, invoiceNo,payId);
                if(sameInvoiceRecord != null){
                    AssertUtils.isNull(sameInvoiceRecord.getStr("uuid"), sameInvoiceRecord.getStr("invoiceNo")+"发票已存在");
                }
            }
            bizInvoiceInfo.set("uuid", uuid);
            //设置发票编号
            bizInvoiceInfo.set("invoiceNo", invoiceNo);
            //设置发票名称
            bizInvoiceInfo.set("invoiceName", invoiceName);
            //设置开票日期
            bizInvoiceInfo.set("invoiceDate", invoiceDate);
            bizInvoiceInfo.set("checkResult", checkResult);
            bizInvoiceInfo.set("invoiceMemo", invoiceMemo);
            //设置发票金额
            bizInvoiceInfo.set("invoiceAmount", invoiceAmount);
            bizInvoiceInfo.set("invoiceNoTaxAmount", invoiceNoTaxAmount);
            if(StringUtils.notBlank(checkCode))
                bizInvoiceInfo.set("checkCode", checkCode);
            bizInvoiceInfo.set("invoiceType", invoiceType);
            bizInvoiceInfo.set("invoiceCode", invoiceCode);

            //设置应收账款金额
            bizInvoiceInfo.set("accountReceivable", accountReceivable);
            isTrue = controller.merge(bizInvoiceInfo.getTable().getName(), bizInvoiceInfo);
            controller.setSessionAttr("historyFlag", true);
        } else {
            //查询是否存在相同发票
            Record sameInvoiceRecord = null;
            String sameInvoiceSql = String.format(
                    " SELECT"
                    + " a.uuid,a.invoice_no"
                    + " FROM %s a"
                    + " WHERE a.sys_status = %s AND"
                    + " a.invoice_no = ? AND"
                    + " a.pay_id = ? ",
                    BizInvoiceInfo.dao.getTable().getName(), 
                    BlConstant.SYS_STATUS_VALUE);
            sameInvoiceRecord = Db.findFirst(sameInvoiceSql, invoiceNo,payId);
            if(sameInvoiceRecord != null){
                AssertUtils.isNull(sameInvoiceRecord.getStr("uuid"), sameInvoiceRecord.getStr("invoiceNo")+"发票已存在");
            }
            //新增
            //参数设置
            bizInvoiceInfo.set("payId", payId);
            //设置发票编号
            bizInvoiceInfo.set("invoiceNo", invoiceNo);
            //设置发票名称
            bizInvoiceInfo.set("invoiceName", invoiceName);
            //设置开票日期
            bizInvoiceInfo.set("invoiceDate", invoiceDate);
            //设置发票金额
            bizInvoiceInfo.set("invoiceAmount", invoiceAmount);
            bizInvoiceInfo.set("checkResult", checkResult);
            bizInvoiceInfo.set("invoiceMemo", invoiceMemo);
            //设置应收账款金额
            bizInvoiceInfo.set("accountReceivable", accountReceivable);
            bizInvoiceInfo.set("invoiceNoTaxAmount", invoiceNoTaxAmount);
            if(StringUtils.notBlank(checkCode))
                bizInvoiceInfo.set("checkCode", checkCode);
            bizInvoiceInfo.set("invoiceType", invoiceType);
            bizInvoiceInfo.set("invoiceCode", invoiceCode);

            isTrue = controller.merge(BizInvoiceInfo.dao.getTable().getName(),bizInvoiceInfo);
            controller.setSessionAttr("historyFlag", true);
        }
        
        return isTrue;
    }
    
原文地址:https://www.cnblogs.com/xiaoniuniu886/p/10334452.html