常用API-BigInteger、BigDecimal

文章介绍了Java中用于处理大整数的BigInteger类和进行精确小数计算的BigDecimal类。BigInteger提供了多种构造方法,如从随机数、字符串或long值创建对象,并支持加、减、乘、除等运算。BigDecimal则强调小数的精确计算,通过double或字符串初始化,提供加、减、乘、除等操作,避免浮点数计算的不精确性。
摘要由CSDN通过智能技术生成

1.BigInteger

BigInteger表示一个大整数

在Java中,整数有四种类型:byte、short、int、long

在底层占用字节个数:byte1个字节,short2个字节,int4个字节,long8个字节

BigInteger构造方法

方法名说明
public  BigInteger(int  num,Random  rnd)获取随机大整数,范围[0~2的num次方-1]
public  BigInteger(String  val)获取整定大整数
public  BigInteger(String  val,int  radix)获取指定进制的大整数
public  static  BigInteger  valueOf(long  val)静态方法获取BigInteger的对象
import java.math.BigInteger;
import java.util.Random;

public class BigIntegerDemo1 {
    public static void main(String[] args) {
        BigInteger bd1 = new BigInteger(4,new Random());
        System.out.println(bd1);

        BigInteger bd2 = new BigInteger("123");
        System.out.println(bd2);

        BigInteger bd3 = new BigInteger("100",10);
        BigInteger bd4 = new BigInteger("100",2);
        System.out.println(bd3);//100
        System.out.println(bd4);//4

        //静态方法
        BigInteger bd5 = BigInteger.valueOf(100);
        System.out.println(bd5);
        //静态方法内部细节:
        //能表示的范围有限,只能在long的取值范围之内,如果超出long范围就不行了
        //在内部对常用数字-16~16进行了优化
        //提前把-16~16先创建好BigInteger对象,如果多次获取不会重新创建新的对象
        BigInteger bd6 = BigInteger.valueOf(16);
        BigInteger bd7 = BigInteger.valueOf(16);
        System.out.println(bd6 == bd7);//true

        BigInteger bd8 = BigInteger.valueOf(17);
        BigInteger bd9 = BigInteger.valueOf(17);
        System.out.println(bd8 == bd9);//false
    }
}

小结:

  • 如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取
  • 如果BigInteger表示的超出了long的范围,可以用构造方法获取
  • 对象一旦创建,BigInteger内部记录的值不能发生改变
  • 只要进行计算都会产生一个新的BigInteger对象

BigInteger成员方法

方法名

说明
public  BigInteger  add(BigInteger  val)加法
public  BigInteger  subtract(BigInteger  val)减法
public  BigInteger  multiply(BigInteger  val)乘法
public  BigInteger  divide(BigInteger  val)除法,获取商
public  BigInteger[ ] divideAndRemainder(BigInteger  val)除法,获取商和余数

public  boolean  equals(Object  x)

比较是否相同
public  BigInteger  pow(int  exponent)次幂
public  BigInteger  max/min(BigInteger  val)返回较大值/较小值
public  int  intValue( )转为int类型整数,超出范围数据有误
import java.math.BigInteger;

public class BigIntegerDemo2 {
    public static void main(String[] args) {
        //创建两个BigInteger对象
        BigInteger bd1 = BigInteger.valueOf(10);
        BigInteger bd2 = BigInteger.valueOf(20);
        BigInteger bd7 = BigInteger.valueOf(20);

        //加法
        BigInteger bd3 = bd1.add(bd2);
        System.out.println(bd3);//30

        //减法
        BigInteger bd4 = bd1.subtract(bd2);
        System.out.println(bd4);//-10

        //乘法除法
        BigInteger bd5 = bd1.multiply(bd2);
        System.out.println(bd5);//200
        BigInteger bd6 = bd1.divide(bd2);
        System.out.println(bd6);//0
        BigInteger[] arr = bd1.divideAndRemainder(bd2);
        for (int i = 0; i < arr.length; i++) {
            BigInteger bd = arr[i];
            System.out.println(bd);//商:0  余数:10
        }
        System.out.println(arr.length);//2

        //equals 方法在本类已重写
        boolean result1 = bd2.equals(bd1);
        System.out.println(result1);//false
        boolean result2 = bd2.equals(bd7);
        System.out.println(result2);//true

        //pow  次幂
        BigInteger bd8 = bd1.pow(2);
        System.out.println(bd8);//100

        //max/min
        BigInteger max = bd1.max(bd2);
        System.out.println(max);//20
        System.out.println(max == bd1);//false
        System.out.println(max == bd2);//true
        BigInteger min = bd1.min(bd2);
        System.out.println(min);//10

        //intValue  转为int类型整数,超出范围数据有误
        BigInteger bd9 = BigInteger.valueOf(1000);
        int i = bd9.intValue();
        System.out.println(i);//1000
    }
}

2.BigDecimal

用于小数的精确计算

用来表示很大的小数

BigDecimal构造方法

方法名说明
public  BigDecimal(double  val)传递double类型小数来创建对象
public  BigDecimal(String  val)传递字符串来创建对象
public  static  BigDecimal  valueOf(double  val)静态方法获取BigDecimal对象
import java.math.BigDecimal;
import java.math.BigInteger;

public class BigDecimalDemo1 {
    public static void main(String[] args) {
        //通过传递double类型的小数来创建对象
        //细节:这种方式有可能是不精确的,所以不建议使用
        BigDecimal bd1 = new BigDecimal(0.01);
        BigDecimal bd2 = new BigDecimal(0.09);

        System.out.println(bd1);
        System.out.println(bd2);

        //通过传递字符串来创建对象
        BigDecimal bd3 = new BigDecimal("0.01");
        BigDecimal bd4 = new BigDecimal("0.09");
        BigDecimal bd5 = bd3.add(bd4);

        System.out.println(bd3);//0.01
        System.out.println(bd4);//0.09
        System.out.println(bd5);//0.10

        //通过静态方法获取对象
        BigDecimal bd6 = BigDecimal.valueOf(10);
        System.out.println(bd6);//10
    }
}

细节:

如果要表示的数字不大,没有超出double的取值范围,建议使用静态方法

如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法

如果我们传递的是0~10之间的整数,包含0和10,那么方法会返回已经创建好的对象,不会重新new

BigDecimal的成员方法

方法名说明
public  BigDecimal  add(BigDecimal  val)加法
public  BigDecimal  subtract(BigDecimal  val)减法
public  BigDecimal  multipiy(BigDecimal  val)乘法
public  BigDecimal  divide(BigDecimal  val)除法
public  BigDecimal  divide(BigDecimal  val,精确几位,舍入模式)除法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值