BigInteger与BigDecimal

BigInteger

BigInteger构造方法

|--------------------------------------------------|------------------------------------|
| public BigInteger(int num, Random rnd) | 获取随机大整数,范围:[0 ~ 2的num次方-1] |
| public BigInteger(String val) | 获取指定的大整数 |
| public BigInteger(String val, int radix) | 获取指定进制的大整数 |

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

BigInteger静态方法

|--------------------------------------------|--------------------------------------------|
| public static BigInteger valueOf(long val) | 静态方法获取BigInteger的对象,内部有优化,范围[-16 ~ 16]。 |

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(BigInteger val) | 转为int类型整数,超出范围数据有误 |

示例代码:

java 复制代码
    @Test
    public void bigInteger() {
    
        BigInteger gz = new BigInteger("5325252523663464364436436346");

        //1.创建两个BigInteger对象
        BigInteger bd1 = BigInteger.valueOf(10);
        BigInteger bd2 = BigInteger.valueOf(5);

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

        //3.除法,获取商和余数
        BigInteger[] arr = bd1.divideAndRemainder(bd2);
        System.out.println(arr[0]);
        System.out.println(arr[1]);

        //4.比较是否相同
        boolean result = bd1.equals(bd2);
        System.out.println(result);

        //5.次幂
        BigInteger bd4 = bd1.pow(2);
        System.out.println(bd4);

        //6.max
        BigInteger bd5 = bd1.max(bd2);


        //7.转为int类型整数,超出范围数据有误
        /*
            BigInteger bd6 = BigInteger.valueOf(2147483647L);
            int i = bd6.intValue();
            System.out.println(i);
        */

        BigInteger bd6 = BigInteger.valueOf(200);
        double v = bd6.doubleValue();
        System.out.println(v);//200.0
    }

运行结果:

BigInteger实现高精度计算出 S=1!+2!+3!+⋯+n!(≤50)
java 复制代码
@Test
public void test() {

    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    BigInteger ans = new BigInteger("0");
    for (int i = n; i > 0; i--) {
        BigInteger res = new BigInteger("1");
        for(int j = i; j > 0; j--) {
            res = res.multiply(BigInteger.valueOf(j));
        }
        ans = ans.add(res);
    }
    System.out.println(ans);
}
java 复制代码
@Test
public void test() {
        BigInteger days = new BigInteger(String.valueOf(20));
        for (int i = 1; i < 22; i ++ ) {
            days = days.multiply(BigInteger.valueOf(20));
        }
        System.out.println(days.mod(BigInteger.valueOf(7)));
        //算出20^22的结果后,再mod上7,然后再加上6就是我们的答案,因为是从星期6开始枚举的。
    }

BigDecimal

BigInteger构造方法

|-------------------------------|----------------------|
| public BigDecimal(int val) | |
| public BigDecimal(long val) | |
| public BiDecimal(double val) | 具有不可预知性,可能丢失精度,不建议使用 |
| public BigDecimal(String val) | 常用 |

BigInteger静态方法

|----------------------------------------------|-----------------------------------------------------------------------|
| public static BigDecimal valueOf(double val) | 底层是new BigDecimal(String str) 没有超出double范围建议使用静态方法,超出double范围建议使用构造方法 |
| public static BigDecimal valueOf(long val) | 内部有优化[0 ~ 10]的整数!!! |

BigInteger常用成员方法

|----------------------------------------------|------|
| public BigDecimal add(BigDecimal value) | 加法运算 |
| public BigDecimal subtract(BigDecimal value) | 减法运算 |
| public BigDecimal multiply(BigDecimal value) | 乘法运算 |
| public BigDecimal divide(BigDecimal value) | 除法运算 |

代码示例:

java 复制代码
@Test
    public void test1() {
        BigDecimal b1 = new BigDecimal("1") ;
        BigDecimal b2 = new BigDecimal("3") ;

        System.out.println(b1.divide(b2 , 2 , RoundingMode.UP));
    }
java 复制代码
    @Test
    public void test2() {
        BigDecimal b1 = new BigDecimal("1") ;
        BigDecimal b2 = new BigDecimal("3") ;

        System.out.println(b1.divide(b2 , 2 , RoundingMode.FLOOR));
    }
java 复制代码
    @Test
    public void test3() {
        BigDecimal b1 = new BigDecimal("0.3") ;
        BigDecimal b2 = new BigDecimal("4") ;

        System.out.println(b1.divide(b2 , 2 , RoundingMode.HALF_UP));
    }
相关推荐
cdut_suye6 分钟前
C++11新特性探索:Lambda表达式与函数包装器的实用指南
开发语言·数据库·c++·人工智能·python·机器学习·华为
桃园码工13 分钟前
第一章:Go 语言概述 1.什么是 Go 语言? --Go 语言轻松入门
开发语言·后端·golang
计算机学姐16 分钟前
基于SSM的宠物领养平台
java·vue.js·spring·maven·intellij-idea·mybatis·宠物
努力更新中21 分钟前
Python浪漫之画一个音符♪
开发语言·python
泰山小张只吃荷园26 分钟前
期末Python复习-输入输出
java·前端·spring boot·python·spring cloud·docker·容器
Mr_Xuhhh29 分钟前
程序地址空间
android·java·开发语言·数据库
YSRM35 分钟前
异或-java-leetcode
java·算法·leetcode
大明湖的狗凯.38 分钟前
MySQL 中的乐观锁与悲观锁
java·数据库·mysql
凤枭香38 分钟前
Python Selenium介绍(二)
开发语言·爬虫·python·selenium
疯狂吧小飞牛40 分钟前
C语言解析命令行参数
c语言·开发语言