BigDecimal类型比较大小和绝对值计算
涉及到BigDecimal类型的比较,最好使用compareTo()
方法,不要用equals()
方法(除非对精度有要求)。
关键方法
修饰符 | 方法 | 描述 |
---|---|---|
BigDecimal | compareTo(BigDecimal val) | 将此 BigDecimal与指定的BigDecimal进行 比较,小于返回-1,等于返回0,大于返回1 |
代码测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.math.BigDecimal; //临时测试类 public class CalculateTest { private static BigDecimal X= new BigDecimal( "0.4" ); private static BigDecimal Y= new BigDecimal( "0.5" ); private static BigDecimal Z= new BigDecimal( "0.6" ); private static BigDecimal T= new BigDecimal( "0.4" ); public static void main(String[] args) { System.out.println(X.compareTo(Y)); System.out.println(Y.compareTo(X)); System.out.println(X.compareTo(T)); if (X.compareTo(Y)==- 1 ){ //小于 System.out.println(X+ "小于" +Y); } if (Y.compareTo(X)== 1 ){ //大于 System.out.println(Y+ "大于" +X); } if (X.compareTo(T)== 0 ){ //等于 System.out.println(X+ "等于" +T); } if (Z.compareTo(Y)>- 1 ){ //大于等于 System.out.println(Z+ "大于等于" +Y); } if (X.compareTo(Y) |
运行结果:
-1
1
0
0.4小于0.5
0.5大于0.4
0.4等于0.4
0.6大于等于0.5
0.4小于等于0.5
0.1
将equals()方法和compareTo()作比较
1 2 3 4 | BigDecimal a= new BigDecimal( "0.1" ); BigDecimal b= new BigDecimal( "0.100" ); System.out.println(a.equals(b)); System.out.println(a.compareTo(b)); |
运行结果:
false
0
我们发现两个的数值是一样的,只是精度不同,equals方法判断不相等,但是compareTo方法判断结果为相等,所以equals方法会考虑精度,但compareTo方法不会。
常用的BigDecimal的定义和用法
最近涉及到浮点数金额的一个运算,为了不失精度,想到了之前刷题用过的BigDecimal,也借此对它进行一个简单的复习。
Java在java.math包中提供的API类BigDecimal对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。
在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中用java.math.BigDecimal更为精准。
BigDecimal创建的是对象,我们不能使用传统的 +、-、*、/ 等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。
BigDecimal在计算中体现出来的精准度
BigDecimal的用法:
1.BigDecimal有4个构造方法
- BigDecimal(int) 创建一个具有参数所指定整数值的对象。
- BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)
- BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
- BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象(优先级最高)
2.BigDecimal常用的加减乘除运算
1 2 3 4 | public BigDecimal add(BigDecimal value); //加法 public BigDecimal subtract(BigDecimal value); //减法 public BigDecimal multiply(BigDecimal value); //乘法 public BigDecimal divide(BigDecimal value); //除法 |
3.BigDecimal常用的比较大小方法
(int compareTo(Object o)):
BigDecimal的equals方法当精度不一样的时候也当做不相等,而compareTo方法却可以忽略精度的不同,只比较数值是否相同。
BigDecimal的compareTo()方法进行的是值比较,返回值为-1,0,1:
- num1
- num1=num2,返回0
- num1>num2, 返回1
4.在java中判断一个BigDecimal的值和0比较
1 | int i=num.compareTo(BigDecimal.ZERO); |
根据 i 的值是 -1 or 0 or 1,即可判断 小于 or 等于 or 大于关系
1 | boolean flag = num.equals(BigDecimal.ZERO) |
直接根据 flag 的 true、false 进行判断
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。