系列文章目录
SpringBoot+Vue3实现登录验证码功能
Java实现发送邮件(定时自动发送邮件)
换个角度使用Redis去解决跨域存取Session问题
Redis缓存穿透、击穿、雪崩问题及解决方法
Spring Cache的使用–快速上手篇
List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)
更多该系列文章请查看我的主页哦
文章目录
- 系列文章目录
- 前言
- 一、BigDecimal介绍
- 二、加减乘除操作调用的方法
- 2.1 加法 add()
- 2.2 减法subtract()
- 2.3 乘法multiply()
- 2.4 除法divide()
- 三、 其它操作
- 3.1 绝对值abs()
- 3.2 比较大小compareTo()
- 总结
前言
在实际开发时前端传值给到后端是String类型的数值时,当我们想对这些String类型的数值做加减乘除等例如int类型的操作时,我们将会用到BigDecimal去进行操作。但大家肯定会说这样我们强转类型,成为int类型后操作不是更加方便吗?为什么还要学这个?因为int类型上限,具体是什么上限相信大家写过高精度加减法的算法题会理解int类型的缺陷。所以我们在涉及高精度的加减乘除操作就需要用到了。具体怎么用请看下面的内容~
一、BigDecimal介绍
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
简单来说,就是对更大或者更小的数进行运算和处理时用BigDecimal,在运用时需调用对应的方法去完成相应的操作。
二、加减乘除操作调用的方法
2.1 加法 add()
加法需调用add方法,直接new即可。代码如下所示,a.add(b)意思就是a+b:
注意处理完后将值转换成String类型
//加法 add
System.out.println("***********加法*************");
BigDecimal a = new BigDecimal("1.01");
BigDecimal b = new BigDecimal("2.01");
String result = a.add(b).toString();
System.out.println("加法:add的使用----- a + b = "+a.toString()+"+"+b.toString()+" = "+result);
运行效果图:
2.2 减法subtract()
减法需调用subtract方法。代码如下所示:a1.subtract(b1)意思就是a1-b1
注意处理完后将值转换成String类型
System.out.println("***********减法*************");
BigDecimal a1 = new BigDecimal("2.02");
BigDecimal b1 = new BigDecimal("1.01");
String result1 = a1.subtract(b1).toString();
System.out.println("减法:subtract的使用----- a1 - b1 = "+a1.toString()+"-"+b1.toString()+" = "+result1);
运行效果图:
2.3 乘法multiply()
乘法需调用multiply方法。代码如下所示:a2.multiply(b2)意思就是a2b2*
注意处理完后将值转换成String类型
System.out.println("***********乘法*************");
//乘法 multiply
BigDecimal a2 = new BigDecimal("2.02");
BigDecimal b2 = new BigDecimal("1.01");
String result2 = a1.multiply(b1).toString();
System.out.println("乘法(保留所有小数位):multiply的使用----- a2 * b2 = "+a2.toString()+"*"+b2.toString()+" = "+result2);
String result3 = a1.multiply(b1).setScale(2, RoundingMode.HALF_UP).toString();
System.out.println("乘法(保留2位小数):multiply的使用结合setScale----- a2 * b2 = "+a2.toString()+"*"+b2.toString()+" = "+result3);
运行效果图,在保留2位小数需调用setScale方法,代码中的’2’表示的就是2位小数:
2.4 除法divide()
除法需调用divide方法。代码如下所示:a3.divide(b3)意思就是a3/b3
注意处理完后将值转换成String类型,必须指定小数位数!!!
System.out.println("***********除法*************");
BigDecimal a3 = new BigDecimal("2.03");
BigDecimal b3 = new BigDecimal("1.01");
//注意 如果出完后小数位太大会报错 像5/3=1.6666666666666~ 就会报错 一般不用
// String result4 = a3.divide(b3).toString();
// System.out.println("除法(保留所有小数位):divide的使用----- a3 / b3 = "+a3.toString()+"/"+b3.toString()+" = "+result4);
//所以一般会直接用这种保留2位小数的写法
String result5 = a3.divide(b3,2,RoundingMode.HALF_UP).toString();
System.out.println("除法(保留2位小数):divide的使用----- a3 / b3 = "+a3.toString()+"/"+b3.toString()+" = "+result5);
运行效果图,需注意,这里必须要指定小数位数。不指定遇到循环小数会报错:
三、 其它操作
3.1 绝对值abs()
绝对值需调用abs方法。代码如下所示:a4.abs()意思就是\a4\
注意处理完后将值转换成String类型
//1.绝对值
BigDecimal a4 = new BigDecimal("-1.2");
BigDecimal result6 = a4.abs();
System.out.println("取绝对值:abs的使用-----"+"|"+a4+"|"+" = "+result6);
运行效果图:
3.2 比较大小compareTo()
比较大小需调用compareTo方法。代码如下所示:a5.compareTo(b5)意思就是a5>b5?
注意处理完后将值转换成String类型,大于返回1,等于返回0,小于返回-1
//2.判断大小
BigDecimal a5 = new BigDecimal("1.3");
BigDecimal b5 = new BigDecimal("1.2");
//a5是否大于b5
int i = a5.compareTo(b5); //(小于 返回-1) (等于 返回 0) (大于 返回 1)
String result7="";
if(i == -1){
result7 = "小于";
}
if(i == 0){
result7 = "等于";
}
if(i == 1){
result7 = "大于";
}
System.out.println("比较大小:compareTo的使用----- a5是否大于b5 result = "+result7 +" i = "+i);
运行效果图:
总结
以上就是对于BigDecimal常用到的方法进行了代码及效果图的演示,相信大家看到这里也是能够运用起来对数值进行上述操作了吧!相信大家也对于BigDecimal有了一定的理解与认识吧!如遇到什么问题可以在评论区交流,我们一起学习进步哦~