Java 中大数的处理方案BigInteger和BigDecimal类的使用

简介: Java 中大数的处理方案BigInteger和BigDecimal类的使用

BigInteger和BigDecimal的介绍

应用场景:

1、BigInteger适合保存比较大的整型

2、BigDecimal适合保存精度更高的浮点型(小数)

一、BigInteger类的使用详解,代码如下

public class BigInteger_ {
    public static void main(String[] args) {
        //当我们编程中,需要处理很大的整数,long不够用
        //可以使用BigInteger的类来搞定
//        long l = 234459897895499999999999999999999l;
//        System.out.println("l=" + l);
        BigInteger bigInteger = new BigInteger("234459897895499999999999999999999");
        System.out.println(bigInteger);
        //1.在对BigInteger进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /
        BigInteger bigInteger2 = new BigInteger("100");
        BigInteger add = bigInteger.add(bigInteger2);
        System.out.println(add);//+
        BigInteger subtract = bigInteger.subtract(bigInteger2);
        System.out.println(subtract); //减
        BigInteger divide = bigInteger.divide(bigInteger2);
        System.out.println(divide);//除
    }
}

输出结果如下

234459897895499999999999999999999
234459897895500000000000000000099
234459897895499999999999999999899
2344598978954999999999999999999

二、BigDecimal类的使用详解,代码如下

public class BigDecimal_ {
    public static void main(String[] args) {
        //当我们需要保存一个精度很高的数时,double不够用
        //可以用BigDecimal
//        double d=19999.2323223423493423423432423;
//        System.out.println(d);
        BigDecimal bigDecimal = new BigDecimal("19999.2323223423493423423432423");
        BigDecimal bigDecimal2 = new BigDecimal("1.1");
        System.out.println(bigDecimal);
        //1.如果对BigDecimal进行运算,比如加减乘除,需要使用对应的方法
        //2.创建一个需要操作的BigDecimal然后调用相应的方法即可
        System.out.println(bigDecimal.add(bigDecimal2));//+
        System.out.println(bigDecimal.subtract(bigDecimal2));//-
        System.out.println(bigDecimal.multiply(bigDecimal2));//*
        //在调用divide 方法时,指定精度即可.BigDecimal.ROUND_CEILING
        //如果有无限循环小数,就会保留分子的精度 就是定义的bigDecimal 数对应的分子的精度,小数点后的位数
        //不指定精度,可能就会抛出异常
        System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));// /  可能抛出异常ArithmeticException
    }
}

输出结果如下

19999.2323223423493423423432423
20000.3323223423493423423432423
19998.1323223423493423423432423
21999.15555457658427657657756653
18181.1202930384994021294029476


目录
相关文章
|
9天前
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
31 5
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
184 57
|
1月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1月前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
185 2
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
85 8
|
2月前
|
Java
Java项目中高精度数值计算:为何BigDecimal优于Double
在Java项目开发中,涉及金额计算、面积计算等高精度数值操作时,应选择 `BigDecimal` 而非 `Double`。`BigDecimal` 提供任意精度的小数运算、多种舍入模式和良好的可读性,确保计算结果的准确性和可靠性。例如,在金额计算中,`BigDecimal` 可以精确到小数点后两位,而 `Double` 可能因精度问题导致结果不准确。
|
2月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
37 0
|
24天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
85 17
|
1月前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
20天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题