BigDecimal详解

本文介绍Java中处理大数值的方法,包括BigInteger和BigDecimal的使用场景、基本操作如加减乘除及大小比较,并演示了如何利用BigDecimal进行精确计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在java 里面,int 的最大值是:2147483647,现在如果想用比这个数大怎么办?换句话说,就是数值较大,这时候就用到了BigDecimal 
BigInteger 也可以存放比较大的数, 和 BigDecimal 的区别是 :BigInteger 存放的是大的整数,而BigDecimal 存放大的小数。

BigDecamal的加减乘除

  1. BigDecimal bignum1 = new BigDecimal("10");  
  1. BigDecimal bignum2 = new BigDecimal("5");  
  1. BigDecimal bignum3 = null;  
  1.   
  1. //加法  
  1. bignum3 =  bignum1.add(bignum2);       
  1. System.out.println("和 是:" + bignum3);  
  1.   
  1. //减法  
  1. bignum3 = bignum1.subtract(bignum2);  
  1. System.out.println("差  是:" + bignum3);  
  1.   
  1. //乘法  
  1. bignum3 = bignum1.multiply(bignum2);  
  1. System.out.println("积  是:" + bignum3);  
  1.   
  1. //除法  
  1. bignum3 = bignum1.divide(bignum2);  
  1. System.out.println("商  是:" + bignum3);  
运行结果为:

BigDecimal的比较大小

  1. BigDecimal num1 = new BigDecimal("0");  
  1. BigDecimal num2 = new BigDecimal("1");  
  1. BigDecimal num3 = new BigDecimal("2");  
  1.   
  1. BigDecimal num = new BigDecimal("1"); //用做比较的值  
  1.   
  1. System.out.println(num1.compareTo(num));    //小于 时,返回 -1  
  1. System.out.println(num2.compareTo(num));    //等于 时,返回 0  
  1. System.out.println(num3.compareTo(num));    //大于 时,返回 1  
  1. 这是输出结果:

BigDecimal写for循环

  1. for (BigDecimal i = new BigDecimal("0"); i.compareTo(new BigDecimal("10")) != 1; i = i.add(new BigDecimal("1"))) {  
  1.     System.out.print(i + "\t");  
  1. }  
     控制台打印的是从0 到 10 。

使用示例(商=被除数.devide(除数,保留小数位数,精确方法)  

应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333....  解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)  在 java中, 四舍五入通过 BigDecimal 来实现。一定要注意:BigDecimal is Immutable。也就是跟String一样,对前一个的修改,比如setScale(), add()等都会返回一个新的BigDecimal. 下面贴上一张图:
  1. roundMode是指舍位时候的模式,传参数的时候用BigDecimal.ROUND_XXXX_XXX  
  1.   
  1. ROUND_CEILING:   舍位时往正无穷方向移动   1.1-> 2   1.5-> 2   1.8-> 2   -1.1-> -1   -1.5-> -1   -1.8-> -1   
  1. ROUND_DOWN:向0的方向移动 1.1-> 1   1.5-> 1   1.8-> 1   -1.1-> -1   -1.5-> -1   -1.8> -1   
  1. ROUND_FLOOR:与CEILING相反,往负无穷   1.1-> 1   1.5-> 1   1.8-> 1   -1.1-> -2   -1.5-> -2   -1.8-> -2   
  1. ROUND_HALF_DOWN:以5为分界线,或曰五舍六入 1.5-> 1   1.6-> 1   -1.5-> -1   -1.6-> -2     
  1. ROUND_HALF_EVEN:同样以5为分界线,如果是5,则前一位变偶数1.15-> 1.2   1.16-> 1.2   1.25-> 1.2   1.26-> 1.3   
  1. ROUND_HALF_UP:最常见的四舍五入   
  1. ROUND_UNNECESSARY:无需舍位   
  1. ROUND_UP:与ROUND_DOWN,远离0的方向 1.1-> 2   1.5-> 2   1.8-> 2   -1.1-> -2   -1.5-> -2   -1.8-> -2    

Java BigDecimal是Java中用于高精度计算的类。它允许我们进行任意精度的数字计算,而不会出现舍入误差。 在Java中,基本数据类型(如int、double等)的计算是有限制的。例如,double类型只能存储15位有效数字,而且在计算过程中可能会出现舍入误差。这在需要精确计算的场合下是不可接受的,这就需要使用BigDecimal类。 以下是一些Java BigDecimal的常用方法: 1. 实例化BigDecimal对象 可以使用BigDecimal的构造函数来实例化一个对象,例如: ``` BigDecimal num1 = new BigDecimal("1234.5678"); BigDecimal num2 = new BigDecimal(9876.5432); ``` 2. 加法、减法、乘法和除法 可以使用add()、subtract()、multiply()和divide()方法进行加、减、乘和除运算,例如: ``` BigDecimal result1 = num1.add(num2); BigDecimal result2 = num1.subtract(num2); BigDecimal result3 = num1.multiply(num2); BigDecimal result4 = num1.divide(num2, 2, RoundingMode.HALF_UP); // 保留两位小数 ``` 3. 取反、取绝对值、取反余弦等 可以使用negate()、abs()、acos()等方法进行相应的计算,例如: ``` BigDecimal result5 = num1.negate(); // 取反 BigDecimal result6 = num1.abs(); // 取绝对值 BigDecimal result7 = new BigDecimal(Math.PI).acos(); // 取反余弦 ``` 4. 比较大小 可以使用compareTo()方法进行大小比较,例如: ``` int cmp = num1.compareTo(num2); if (cmp > 0) { System.out.println("num1 > num2"); } else if (cmp < 0) { System.out.println("num1 < num2"); } else { System.out.println("num1 = num2"); } ``` 以上是Java BigDecimal的一些常用方法,使用BigDecimal类可以很方便地进行高精度计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值