BigDecimal使用日常使用方法

   /**
     * 测试数据->检查除数为0的报错异常
     */
    public void demo1() {
        BigDecimal currentYear = new BigDecimal("2.1");
        BigDecimal maxCurentYear1 = new BigDecimal(0.00);
        BigDecimal minCurentYear1 = new BigDecimal(0.00);
        BigDecimal subtract = new BigDecimal(0.00);
        BigDecimal x = new BigDecimal(0.00);


        //
        List<StockInstRatingEntity> currentyearList = new ArrayList<>();
        StockInstRatingEntity po = new StockInstRatingEntity();
        po.setCurrentYear1(new BigDecimal("5.20"));
        StockInstRatingEntity po1 = new StockInstRatingEntity();
        po1.setCurrentYear1(new BigDecimal("9.50"));
        StockInstRatingEntity po2 = new StockInstRatingEntity();
        po2.setCurrentYear1(new BigDecimal("7.50"));

        currentyearList.add(po);
        currentyearList.add(po1);
        currentyearList.add(po2);
        try {
            currentyearList.stream().map(StockInstRatingEntity::getCurrentYear1).sorted(Comparator.reverseOrder()).forEach(n -> System.out.print(n + "\n"));
            currentyearList.stream().map(StockInstRatingEntity::getCurrentYear1).sorted(Comparator.naturalOrder()).forEach(n -> System.out.print(n + "\n"));


            /**
             * Comparator.naturalOrder() 自然排序(升序)【1,2,5.20,5.21,6,7,8】
             * Comparator.reverseOrder() 倒自然排序(倒序)【8,7,6,5.21,5.20,2,1】
             */
            maxCurentYear1 = currentyearList.stream()
                    .map(StockInstRatingEntity::getCurrentYear1).max(Comparator.naturalOrder()).get();
            /**
             * max取最大【最后一个】
             * min取最大【第一个】
             * reverseOrder倒序之后是
             */
            minCurentYear1 = currentyearList.stream()
                    .map(StockInstRatingEntity::getCurrentYear1).max(Comparator.reverseOrder()).get();


            /**
             * subtract() 减法 a.subtract(b) -> a-b
             */
            subtract = maxCurentYear1.subtract(currentYear);
            /**
             * abs() 取最绝对值 负数也是整数
             * divide() a.divide(b,4,BigDecimal.ROUND_HALF_UP) a除以b保留4位数,四舍五入进五
             * multiply() a.multiply(b) a乘以b
             * setScale(2,BigDecimal.ROUND_HALF_UP) 格式化小数点 ->保留两位小数点,四舍五入进五
             *
             * BigDecimal.ROUND_UP:进位制:不管保留数字后面是大是小(0除外)都会进1
             * BigDecimal.ROUND_DOWN:保留设置数字,后面所有直接去除
             * BigDecimal.ROUND_HALF_UP:根据保留数字后一位>=5进行四舍五入
             * BigDecimal.ROUND_HALF_DOWN:根据保留数字后一位>5进行四舍五入
             */
            x = subtract.abs().divide(currentYear.abs(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
            System.out.println("结果数据是:" + x);
        } catch (ArithmeticException e) {
            log.info("除数不能为0");
            e.printStackTrace();
        } catch (Exception e) {
            log.info("所有异常");
            e.printStackTrace();
        }
    }

 /**
     * 简单加减乘除->BigDecimal两个数字比较
     */
    public void demo2() {
        BigDecimal num1 = new BigDecimal(20);
        BigDecimal num2 = new BigDecimal(10);
        /**
         * 返回值  1  ==》 a>b
         * 返回值 -1  ==》 a<b
         * 返回值  0  ==》 a=b
         */
        int result = num1.compareTo(num2);
        log.info("{}", result);

        /**
         * 加
         */
        BigDecimal add = num1.add(num2);
        log.info("{}", add);
        /**
         * 减
         */
        BigDecimal subtract = num1.subtract(num2);
        log.info("{}", subtract);
        /**
         * 乘
         */
        BigDecimal multiply = num1.multiply(num2);
        log.info("{}", multiply);
        /**
         * 除
         */
        BigDecimal divide = num1.divide(num2);
        log.info("{}", divide);

        /**
         * BigDecimal.ROUND_UP:进位制:不管保留数字后面是大是小(0除外)都会进1
         * BigDecimal.ROUND_DOWN:保留设置数字,后面所有直接去除
         * BigDecimal.ROUND_HALF_UP:根据保留数字后一位>=5进行四舍五入
         * BigDecimal.ROUND_HALF_DOWN:根据保留数字后一位>5进行四舍五入
         */
        BigDecimal divide1 = new BigDecimal("55.5").divide(new BigDecimal("21.4"), 4, BigDecimal.ROUND_UP);
        log.info("{}", divide1);
        BigDecimal divide2 = new BigDecimal("55.5").divide(new BigDecimal("21.4"), 4, BigDecimal.ROUND_DOWN);
        log.info("{}", divide2);
        BigDecimal divide3 = new BigDecimal("55.5").divide(new BigDecimal("21.4"), 4, BigDecimal.ROUND_HALF_UP);
        log.info("{}", divide3);
        BigDecimal divide4 = new BigDecimal("55.5").divide(new BigDecimal("21.4"), 4, BigDecimal.ROUND_HALF_DOWN);
        log.info("{}", divide4);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值