转载

总结:Java中BigDecimal常用方法总结

一、前言

相信很多小伙伴刚上班的时候才接触过BigDecimal,今日博主就跟大家一起分享一下BigDecimal常用的一些方法。

二、常用方法

0、初始化

代码展示:

//初始化
BigDecimal num1 = new BigDecimal("1500");
BigDecimal num2 = new BigDecimal("800");

//或
BigDecimal num3 = BigDecimal.valueOf(1500);
BigDecimal num4 = BigDecimal.valueOf(800);

System.out.println("num1 == "+num1);
System.out.println("num2 == "+num2);
System.out.println("num3 == "+num3);
System.out.println("num4 == "+num4);

控制台输出结果:

num1 == 1500
num2 == 800
num3 == 1500
num4 == 800
1、加法

代码展示:

//加法
System.out.println("num1.add(num2) == "+num1.add(num2));

控制台输出结果:

num1.add(num2) == 2300
2、减法

代码展示:

//减法
System.out.println("num1.subtract(num2) == "+num1.subtract(num2));

控制台输出结果:

num1.subtract(num2) == 700
3、乘法

代码展示:

//乘法
System.out.println("num1.multiply(num2) == "+num1.multiply(num2));

控制台输出结果:

num1.multiply(num2) == 1200000
4、除法(包含保留小数位数,保留方式)

代码展示:

/**除法(divide有三个参数的方法,第一参数表示除数,第二个参数表示小数点后保留位数,第三个参数表示取舍规则。 只有在作除法运算或四舍五入时才用到取舍规则。因为BigDecimal除法可能出现不能整除的情况, 比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。 所以当我们用三参数的除法方法时,规定了保留几位小数以及你的保留方式,就可以避免异常) **/

//向正无穷方向舍入
System.out.println("num1.divide(num2,2,BigDecimal.ROUND_CEILING) == "+num1.divide(num2,2,BigDecimal.ROUND_CEILING));
//向零方向舍入
System.out.println("num1.divide(num2,2,BigDecimal.ROUND_DOWN) == "+num1.divide(num2,2,BigDecimal.ROUND_DOWN));
//向负无穷方向舍入
System.out.println("num1.divide(num2,2,BigDecimal.ROUND_FLOOR) == "+num1.divide(num2,2,BigDecimal.ROUND_FLOOR));
//向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入
System.out.println("num1.divide(num2,2,BigDecimal.ROUND_HALF_DOWN) == "+num1.divide(num2,2,BigDecimal.ROUND_HALF_DOWN));
//向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
System.out.println("num1.divide(num2,2,BigDecimal.ROUND_HALF_EVEN) == "+num1.divide(num2,2,BigDecimal.ROUND_HALF_EVEN));
//向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入
System.out.println("num1.divide(num2,2,BigDecimal.ROUND_HALF_UP) == "+num1.divide(num2,2,BigDecimal.ROUND_HALF_UP));
//向远离0的方向舍入
System.out.println("num1.divide(num2,2,BigDecimal.ROUND_UP) == "+num1.divide(num2,2,BigDecimal.ROUND_UP));

控制台输出结果:

num1.divide(num2,2,BigDecimal.ROUND_CEILING) == 1.88
num1.divide(num2,2,BigDecimal.ROUND_DOWN) == 1.87
num1.divide(num2,2,BigDecimal.ROUND_FLOOR) == 1.87
num1.divide(num2,2,BigDecimal.ROUND_HALF_DOWN) == 1.87
num1.divide(num2,2,BigDecimal.ROUND_HALF_EVEN) == 1.88
num1.divide(num2,2,BigDecimal.ROUND_HALF_UP) == 1.88
num1.divide(num2,2,BigDecimal.ROUND_UP) == 1.88
5、取余

代码展示:

//取余
BigDecimal[] result = num1.divideAndRemainder(num2);

System.out.println("整数结果 == "+result[0]);
System.out.println("余数结果 == "+result[1]);

控制台输出结果:

整数结果 == 1
余数结果 == 700
6、比较

代码展示:

//比较
int compareResult = num1.compareTo(num2);
switch(compareResult){
    case -1:
        System.out.println("比较结果:num1 < num2");break;
    case 0:
        System.out.println("比较结果:num1 = num2");break;
    case 1:
        System.out.println("比较结果:num1 > num2");break;
    default:break;
}

控制台输出结果:

比较结果:num1 > num2
7、绝对值

代码展示:

//绝对值
System.out.println("|num2-num1| == "+num2.subtract(num1).abs());

控制台输出结果:

|num2-num1| == 700
8、相反数

代码展示:

//相反数
System.out.println("-num1 == "+num1.negate());

控制台输出结果:

-num1 == -1500
正文到此结束
本文目录