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));
    }
相关推荐
Ten peaches几秒前
Selenium-Java版(环境安装)
java·前端·selenium·自动化
Ronin3057 分钟前
【C++】18.二叉搜索树
开发语言·数据结构·c++
Susea&8 分钟前
初始C++:类和对象(中)
c语言·开发语言·c++
编程、小哥哥17 分钟前
Java求职者面试:从Spring Boot到微服务的技术点解析
java·spring boot·redis·微服务·spring security·高并发·面试题
山海不说话23 分钟前
PyGame游戏开发(入门知识+组件拆分+历史存档/回放+人机策略)
开发语言·python·pygame
明月看潮生24 分钟前
青少年编程与数学 02-019 Rust 编程基础 11课题、类型系统
开发语言·青少年编程·rust·数据类型·编程与数学
purrrew28 分钟前
【Java ee初阶】jvm(1)
java·jvm·java-ee
Javatutouhouduan39 分钟前
线上问题排查:JVM OOM问题如何排查和解决
java·jvm·数据库·后端·程序员·架构师·oom
大锦终39 分钟前
【C++】unordered_map与set的模拟实现
开发语言·数据结构·c++·哈希算法
范纹杉想快点毕业1 小时前
以项目的方式学QT开发C++(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
c语言·开发语言·c++·windows·vscode·qt·visual studio