BigDecimal是java中用到比较多的高精度数据类型,本文将通过代码实例来讲解BigDecimal类的正确使用方法,以避免我们经常犯一些低级的错误。
一、初始化
请注意,BigDecimal的初始化最常用的是下面2种。特别注意,请一定避免使用double类型来进行BigDecimal的初始化。
1、String初始化
new BigDecimal("0.1") ---推荐
new BigDecimal(0.1) ---禁用
如果用禁用的代码,那么实际得到可能是: 0.1000000000000000055511151231257827021181583404541015625,特别在资金的计算时,涉及到小数点后面的数字,这时一定要使用String类型进行初始化。
2、valueOf初始化
BigDecimal.valueOf(0.1)
得到的结果与方法1中的一致,double 直接 tostring 为一个字符串的形式进行转换的。
二、加减法
1、加法add
BigDecimal a = new BigDecimal("0.25");
BigDecimal b = new BigDecimal("0.05");
BigDecimal result = a.add(b); //结果是0.3
2、减法subtract
BigDecimal a = new BigDecimal("0.25");
BigDecimal b = new BigDecimal("0.05");
BigDecimal result = a.subtract(b); //结果是0.2
三、乘除法
1、乘法multiply
BigDecimal a = new BigDecimal("0.25");
BigDecimal b = new BigDecimal("0.05");
BigDecimal result = a.multiply(b); //结果是0.0125
2、除法divide
BigDecimal a = new BigDecimal("0.25");
BigDecimal b = new BigDecimal("0.05");
BigDecimal result = a.divide(b); //结果是5
3、小数点保留与四舍五入setScale
除法一般都要做小数点保留几位和四舍五入的处理,用到setScale方法
BigDecimal a = new BigDecimal("0.25");
BigDecimal b = new BigDecimal("10");
BigDecimal result = a.divide(b).setScale(2, BigDecimal.ROUND_HALF_UP); //结果是0.03
四、比较大小compareTo
BigDecimal a = new BigDecimal("0.25");
BigDecimal b = new BigDecimal("0.05");
if(a.compareTo(b) == -1){
System.out.println("a小于b");
}
if(a.compareTo(b) == 0){
System.out.println("a等于b");
}
if(a.compareTo(b) == 1){
System.out.println("a大于b"); //输出结果a大于b
}
if(a.compareTo(b) > -1){
System.out.println("a大于等于b");
}
if(a.compareTo(b) < 1){
System.out.println("a小于等于b");
}
欢迎扫码加友,共同交流技术问题。