BigDecimal的使用方法

**

BigDecimal的加减乘除使用方法

**
这边说下BigDecimal的使用方法,尤其是除法对小数的处理,BigDecimal在这方面做的比较出色。

import java.math.BigDecimal;

/**
 * @author XXXXXX
 * @description BigDecimal的使用
 * @date 2019/5/21
 */
public class TestBigDecimal {
    public static void main(String[] args) {
        //数字初始化
        BigDecimal num_a = new BigDecimal(0.00333);
        BigDecimal num_b = new BigDecimal(3210000);
        BigDecimal num_c = new BigDecimal(-3210000);
        //字符串初始化
        BigDecimal num_s_a = new BigDecimal("0.00222");
        BigDecimal num_s_b = new BigDecimal("3210000");
        BigDecimal num_s_c = new BigDecimal("-3210000");

        //加法
        BigDecimal result_1 = num_a.add(num_b);
        BigDecimal result_s_1 = num_s_a.add(num_s_b);
        //减法
        BigDecimal result2 = num_a.subtract(num_b);
        BigDecimal result_s_2 = num_s_a.subtract(num_s_b);
        //乘法
        BigDecimal result3 = num_a.multiply(num_b);
        BigDecimal result_s_3 = num_s_a.multiply(num_s_b);
        //绝对值
        BigDecimal result4 = num_c.abs();
        BigDecimal result_s_4 = num_s_c.abs();
        //除法
        BigDecimal result5 = num_b.divide(num_a,5,BigDecimal.ROUND_HALF_UP);
        BigDecimal result_s_5 = num_s_c.divide(num_s_a,5,BigDecimal.ROUND_HALF_UP);

        System.out.println("加法用value结果:"+result_1);
        System.out.println("加法用string结果:"+result_s_1);

        System.out.println("减法value结果:"+result2);
        System.out.println("减法用string结果:"+result_s_2);

        System.out.println("乘法用value结果:"+result3);
        System.out.println("乘法用string结果:"+result_s_3);

        System.out.println("绝对值用value结果:"+result4);
        System.out.println("绝对值用string结果:"+result_s_4);

        System.out.println("除法用value结果:"+result5);
        System.out.println("除法用string结果:"+result_s_5);
         System.out.println("-------------华丽的分割线-------------");
        //除法舍入模式
        BigDecimal test_a = new BigDecimal("2");
        BigDecimal test_b = new BigDecimal("3");
        BigDecimal ROUND_UP = test_a.divide(test_b,5,BigDecimal.ROUND_UP);
        BigDecimal ROUND_DOWN = test_a.divide(test_b,5,BigDecimal.ROUND_DOWN);
        BigDecimal ROUND_CEILING = test_a.divide(test_b,5,BigDecimal.ROUND_CEILING);
        BigDecimal ROUND_FLOOR = test_a.divide(test_b,5,BigDecimal.ROUND_FLOOR);
        BigDecimal ROUND_HALF_UP = test_a.divide(test_b,5,BigDecimal.ROUND_HALF_UP);
        BigDecimal ROUND_HALF_DOWN = test_a.divide(test_b,5,BigDecimal.ROUND_HALF_DOWN);
        BigDecimal ROUND_HALF_EVEN = test_a.divide(test_b,5,BigDecimal.ROUND_HALF_EVEN);
//        BigDecimal ROUND_UNNECESSARY = test_a.divide(test_b,5,BigDecimal.ROUND_UNNECESSARY);
        //计算2÷3的结果(最后一种ROUND_UNNECESSARY在结果为无限小数的情况下会报错)
        System.out.println("除法---ROUND_UP---结果:"+ROUND_UP);
        System.out.println("除法---ROUND_DOWN---结果:"+ROUND_DOWN);
        System.out.println("除法---ROUND_CEILING---结果:"+ROUND_CEILING);
        System.out.println("除法---ROUND_FLOOR---结果:"+ROUND_FLOOR);
        System.out.println("除法---ROUND_HALF_UP---结果:"+ROUND_HALF_UP);
        System.out.println("除法---ROUND_HALF_DOWN---结果:"+ROUND_HALF_DOWN);
        System.out.println("除法---ROUND_HALF_EVEN---结果:"+ROUND_HALF_EVEN);
//        System.out.println("除法---ROUND_UNNECESSARY---结果:"+ROUND_UNNECESSARY);
    }
}

代码的输出:

加法用value结果:3210000.0033300000000000000606459327201491760206408798694610595703125
加法用string结果:3210000.00222
减法value结果:-3209999.9966699999999999999393540672798508239793591201305389404296875
减法用string结果:-3209999.99778
乘法用value结果:10689.3000000000001946734440316788550262572243809700012207031250000
乘法用string结果:7126.20000
绝对值用value结果:3210000
绝对值用string结果:3210000
除法用value结果:963963963.96396
除法用string结果:-1445945945.94595
-------------华丽的分割线-------------
除法---ROUND_UP---结果:0.66667
除法---ROUND_DOWN---结果:0.66666
除法---ROUND_CEILING---结果:0.66667
除法---ROUND_FLOOR---结果:0.66666
除法---ROUND_HALF_UP---结果:0.66667
除法---ROUND_HALF_DOWN---结果:0.66667
除法---ROUND_HALF_EVEN---结果:0.66667

其中,除法divide()参数使用:
使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,不然会出现报错
divide函数配置的参数如下:

public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 

即为 (BigDecimal divisor 除数, int scale 精确小数位, int roundingMode 舍入模式)

里面八中舍入模式:
1、ROUND_UP 舍入远离零的舍入模式
2、ROUND_DOWN 接近零的舍入模式
3、ROUND_CEILING 接近正无穷大的舍入模式
4、ROUND_FLOOR 接近负无穷大的舍入模式
5、ROUND_HALF_UP 四舍五入
6、ROUND_HALF_DOWN 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式
7、ROUND_HALF_EVEN 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入
8、ROUND_UNNECESSARY 断言请求的操作具有精确的结果,因此不需要舍入
具体说明参考:http://www.bdqn.cn/news/201311/11834.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值