BigDecimal
位置:java.math包中
作用:精确计算浮点数
创建方式:BigDecimal bd=new BigDecimal();
方法:
BigDecimal add(BigDecimal bd); //加
BigDecimal subtract(BigDecimal bd); //减
BigDecimal multiply(BigDecimal bd); //乘
BigDecimal divide(BigDecimal bd); //除
注意:当进行除法运算时,如果存在除不尽的情况,需要指定保留的小数点位数和舍入方式,否则会抛出异常
在讨论BigDecimal的具体使用方法时,我们先来看一下double型数据在计算时的应用
运行以下代码:
public class Demo4 {
public static void main(String[] args) {
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1 - d2);
double result = (1.4 - 0.5) / 0.9;
System.out.println(result);
运行结果如下:
我们发现运行出的结果并不是0.1和1,这是因为double类型的数据在存储时采用的是近似值存储的方式,也就是说我们看到是把1.0赋值给了d1,把0.9赋值给了d2,但实际上计算机在存储时可能是d1=0.999999999,d2=0.89999999(实际上d1,d2的值并不是这个,此处只是举例),所以我们在使用double类型数据进行计算时是存在精度误差的,因此在对数据有精度要求(如:银行)的计算时我们采用BigDecimal类型来计算
运行以下代码:
BigDecimal bd1 = new BigDecimal("1.0");//采用字符型是因为字符型数据表示的是准确的值
BigDecimal bd2 = new BigDecimal("0.9");
//加法
BigDecimal r2 = bd1.add(bd2);
System.out.println(r2);
//减法
BigDecimal r1 = bd1.subtract(bd2);
System.out.println(r1);
//乘法
BigDecimal r3 = bd1.multiply(bd2);
System.out.println(r3);
//除法
BigDecimal r4 = bd2.divide(new BigDecimal("0.7"));
System.out.println(r4);
运行结果如下:
我们发现在程序执行到除法这一步时,抛出了一个异常,这是因为0.9除以0.7是除不尽的,所以程序执行到这一步时没有继续走下去,而是抛出了一个异常,也就是我们在文章开头所说的:当进行除法运算时,如果存在除不尽的情况,需要指定保留的小数点位数和舍入方式,否则会抛出异常
因此我们在进行除法运算时要使用以下格式:
divide(BigDecimal bd,int scal,RoundingMode mode)
参数scal:指定精确到小数点后几位
参数mode:指定小数部分的舍入方式,通常采用四舍五入的方式,取值为BigDecimal.ROUND_HALF_UP
所以我们将除法运算时的代码修改成以下形式即可:
//除法
BigDecimal r4 = new BigDecimal("0.9").divide((new BigDecimal("0.7")), 2,BigDecimal.ROUND_HALF_UP);//保留两位有效数字,并且采用四舍五入的方式
System.out.println(r4);
运行结果如下:
以上就是Java中BigDecimal的使用介绍,感谢您阅读本文,如有疑问,欢迎在评论区留言!