概念: BigDecimal是一种数据结构,适用于精度较高的数据存储和计算,一般企业大型数据常用BigDecimal来进行存储和处理。
它是一种Java封装好的对象型数据结构
在理解时可以把它和String数据类型对比,他们许多操作都已被封装好
用创建好的bigdecimal对象调用封装方法进行加减乘除对比等基础操作
// 初始化定义
// 构造函数
// int
BigDecimal inta = new BigDecimal(1);
// double
BigDecimal doubleb = new BigDecimal(2.0);
// String
BigDecimal Stringc = new BigDecimal("3.0");
// long
BigDecimal longd = new BigDecimal(Long.valueOf(4));
//转换
BigDecimal assignment = BigDecimal.valueOf(6);
// 基础数学运算(加减乘除对比)
// 加
System.out.println(assignment.add(inta));
// 减
System.out.println(assignment.subtract(Stringc));
// 乘
System.out.println(assignment.multiply(longd));
// 除
System.out.println(assignment.divide(longd));
// 对比
System.out.println("等于:"+assignment.compareTo(BigDecimal.valueOf(6)));
System.out.println("大于:"+assignment.compareTo(longd));
//_________________________________________________________________________________
7
3.0
24
1.5
等于:0
大于:1
【注意事项】
- Bigdecimal作为一种对象型数据结构,在使用时要先进行判空操作,以防出现空指针问题
- 在进行除法时,要确定精度问题,取后几位小数,否则会出现无线余数问题,报错如下
java.lang.ArithmeticException:Non-terminating decimal expansion;no exact representable decimal result
具体解决办法如下
BigDecimal divide(BigDecimal divisor,int scale,MathContext mc);
再进行除法运算时使用上述函数,即传入一个精度参数scale,再传入一个舍入模式,一般常用四舍五入模式ROUND_HALF_UP
【 常用方法集合】
a.compareTo(b)//比较大小,ab均不能为null,否则会报空指针
BigDecimal b = a.setScale(0, ROUND_HALF_UP);//保留0位小数,四舍五入
a.toString() //转换成字符串
a.doubleValue() //转换成双精度数
a.floatValue() //转换成单精度数
a.longValue() //转换成长整数
a.intValue() //转换成整数
a.abs() //返回a的绝对值,精度不变。
实际开发中多会要求精度问题并四舍五入,上述加减乘除方法有重写版本,在参数中加int值即可,具体方法链接如下