• BigDecimal常用API


    BigDecimal 在日常开发中比较常用,一些涉及金额的计算及为了确保精度计算都会使用,下面是一些常用的API

    1、加法 add

            BigDecimal a = new BigDecimal(999);
            BigDecimal b = new BigDecimal(10000);
            a = a.add(b);
            System.out.println(a.add(b));//10999
    
    • 1
    • 2
    • 3
    • 4

    2、减法 subtract

    		BigDecimal a = new BigDecimal(999);
            BigDecimal b = new BigDecimal(10000);
            a = a.subtract(b);
            System.out.println(a);//-9001
    
    • 1
    • 2
    • 3
    • 4

    3、乘法 multiply

    		BigDecimal a = new BigDecimal(999);
            BigDecimal b = new BigDecimal(10000);
            BigDecimal c = a.multiply(b);
            System.out.println("a*b=" + c);
    
    • 1
    • 2
    • 3
    • 4

    4、除法 divide

    		BigDecimal a = new BigDecimal(999);
            BigDecimal b = new BigDecimal(10000);
            c = a.divide(b);
            System.out.println("a/b=" + c);
    
    • 1
    • 2
    • 3
    • 4

    5、求余 divideAndRemainder

    divideAndRemainder方法会返回一个长度为2的BigDecimal数组,第一个为商,第二个为余数

    		BigDecimal a = new BigDecimal(999);
            BigDecimal b = new BigDecimal(10000);
            BigDecimal[] c = a.divideAndRemainder(b);
            System.out.println("a/b=" + c[0] + "余数" + c[1]);
    
    • 1
    • 2
    • 3
    • 4

    6、比较大小 compareTo

    BigDecimal可以通过compareTo方法来进行比较。
    返回的结果是int类型,-1表示小于,0是等于,1是大于。

            BigDecimal a = new BigDecimal(999);
            BigDecimal b = new BigDecimal(10000);
    
            if (a.compareTo(b) > 0) {
                System.out.println("a大于b");
            } else if (a.compareTo(b) == 0) {
                System.out.println("a等于b");
            } else {
                System.out.println("a小于b");
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7、处理小数

    下面是取舍模式

    • ROUND_UP : 对于正数来说是舍弃小数后,加一,对于负数来说,舍弃小数后减一。例如:100.4,取整数为101,-100.5,取整数为-101
    • ROUND_DOWN : 直接舍弃小数或者说精确位后的小数
    • ROUND_CEILING : 如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作 (取附近较大的整数)。
    • ROUND_FLOOR : 如果 BigDecimal 是正的,则做 ROUND_DOWN 操作;如果为负,则做 ROUND_UP 操作 (取附近较小的整数)。
    • ROUND_HALF_UP : 四舍五入,0.5向上取整 100.5 -> 101
    • ROUND_HALF_DOWN : 四舍五入,0.5向下取整 100.5 -> 100
    • ROUND_UNNECESSARY : 如果存在小数位,就抛ArithmeticException 异常。

    单独设置

            BigDecimal a = new BigDecimal("998.5");
            BigDecimal up = a.setScale(0, RoundingMode.UP);
            System.out.println( "up ======= " + up);
            BigDecimal down = a.setScale(0, RoundingMode.DOWN);
            System.out.println( "down ======= " + down);
            //取最近的较大整数
            BigDecimal ceiling = a.setScale(0, RoundingMode.CEILING);
            System.out.println( "ceiling ======= " + ceiling);
            //取最近的较小整数
            BigDecimal floor = a.setScale(0, RoundingMode.FLOOR);
            System.out.println( "floor ======= " + floor);
            //四舍五入,0.5向上取整
            BigDecimal halfUp = a.setScale(0, RoundingMode.HALF_UP);
            System.out.println( "halfUp ======= " + halfUp);
            //四舍五入,0.5向下取整
            BigDecimal halfDown = a.setScale(0, RoundingMode.HALF_DOWN);
            System.out.println( "halfDown ======= " + halfDown);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    除法运用

    //结果保留两位小数
    BigDecimal divide = a.divide(b, 2, RoundingMode.UP);
    System.out.println(divide);
    
    • 1
    • 2
    • 3
  • 相关阅读:
    Spring IOC理论
    前端培训丁鹿学堂:vue3的setup语法糖总结(二)
    ON1 Photo RAW 2024照片编辑器「Mac」
    安装docker,docker-compose
    音乐播放器APP
    决策树模型(4)Cart算法
    memcpy和memmove函数的介绍和模拟实现
    02 - QT 自定义控件封装
    SysML与MBSE的关系
    恶补《操作系统》2_3——王道学习笔记
  • 原文地址:https://blog.csdn.net/zhang_m_h/article/details/126010755