一、前言
相信很多小伙伴刚上班的时候才接触过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