JAVA 中的大数字操作类详解

 更新时间:2024年10月18日 09:46:39   作者:当代红领巾  
Java的BigInteger类用于处理超出int和long范围的大整数,而BigDecimal类则用于高精度的浮点数运算,这两个类都是Number的子类,提供了一系列方法执行加减乘除等运算,BigInteger不支持表示小数,只能表示整数,BigDecimal可以控制小数位数和舍入方式,感兴趣的朋友一起看看吧

字符串表示大数字, "123456789123456789123456789123456789123456789"

(1)java.math.BigInteger 大整数操作类

(2)java.math.BigDecimal 大小数操作类

        这两个类和 Java 中的表示数字的基本数据类型的包装类(Byte、Short、Integer、Long、 Double、Float)都是继承自 Number,即 Number 类的子类。

大整数操作类:BigInteger 概述

   BigInteger 是一个用于表示任意精度整数的类。它可以处理仅在 int 或 long 范围内的整数运算以及超出这些范围的整数。

主要特点

(1)精度:不受 int 和 long 限制,可以处理非常大的整数。

(2)不支持小数:只能表示整数。

(3)所有操作(加法、减法、乘法、除法等)都通过方法实现,不能直接使用运算符。

使用场景

(1)计算大数的结果(如科学计算、密码学等)。

(2)需要精确的整数计算(如金融、统计分析等)。

(3)需要处理大范围数值的算法(如大数运算、阶乘计算等)。

        大整数操作类:BigInteger 可以操作无限大的整型数据。

构造器

        对于 BigInteger 类有很多个构造器,但是最常用的就是有一个 String 类型参数的构造器:

public BigInteger(String val) {
    this(val, 10);
}

 常用方法

(1)BigInteger add(BigInteger val)

        加法操作;

(2)BigInteger subtract(BigInteger val)

        减法操作;

(3)BigInteger multiply(BigInteger val)

        乘法操作;

(4)BigInteger divide(BigInteger val)

        除法操作(不保留小数部分);

(5)BigInteger[] divideAndRemainder(BigInteger val)

        除法操作,返回值是一个长度为 2 的数组,数组中的第一个元素表示商,数组中第二个元素表示余 数。

示例:

import java.math.BigInteger;
public class Test {
    public static void main(String[] args) {
        BigInteger bigInteger1 = new BigInteger("123456789123456789123456789123456789123456789");
        BigInteger bigInteger2 = new BigInteger("123456789123456789123456789123456789123456789");
        System.out.println(bigInteger1);
        System.out.println(bigInteger2);
        // 加法
        BigInteger plus = bigInteger1.add(bigInteger2);
        // 减法
        BigInteger subtract = bigInteger1.subtract(bigInteger2);
        // 乘法
        BigInteger multiply = bigInteger1.multiply(bigInteger2);
        // 除法
        BigInteger divide = bigInteger1.divide(bigInteger2);
        System.out.println(plus);
        System.out.println(subtract);
        System.out.println(multiply);
        System.out.println(divide);
    }
}

打印结果:

大小数操作类:BigDecimal 

概述

   BigDecimal 是一个用于表示任意精度的浮点数的类。它具有控制小数位数和舍入策略的功能。

主要特点

(1)精度高,不会受到 float 和 double 的限制,适用于需要精确表示小数点数据的场景。

(2)支持控制小数点后的位数及舍入方式。

(3)通过方法实现计算,不能直接使用运算符。

使用场景

(1)金融计算:涉及到货币或者利息计算时,确保不会因为浮点数运算导致的精度损失。

(2)科学计算:需要更高精度的小数计算。

(3)需要高精度结果的任何应用(如价格计算、统计数据处理中)。

构造器

        BigDecimal(String val) 创建一个表示字符串参数 val 的 BigDecimal 类型的大小数对象。

常用方法

(1)BigDecimal add(BigDecimal augend) 加法操作;

(2)BigDecimal subtract(BigDecimal subtrahend) 减法操作;

(3)BigDecimal multiply(BigDecimal multiplicand) 乘法操作;

(4)BigDecimal divide(BigDecimal divisor) 除法操作,如果除不尽,则会报 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result;

(5)BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 除法操作,可以设置结果保留的小数的位数以及进位模式,scale 参数表示保留的小数位数, roundingMode 参数表示进位模式。BigDecimal 类中定义多个静态常量表示进位模式, ROUND_HALF_UP 这个静态常量就表示四舍五入。

示例:

import java.math.BigDecimal;
public class Test {
    public static void main(String[] args) {
        BigDecimal bigDecimal1 = new BigDecimal("123456789123456789123456789123456789123456789.123456789123456789123456789123456789123456789");
        BigDecimal bigDecimal2 = new BigDecimal("123456789123456789123456789123456789123456789.123456789123456789123456789123456789123456789");
        System.out.println(bigDecimal1);
        System.out.println(bigDecimal2);
        // 加法
        BigDecimal plus = bigDecimal1.add(bigDecimal2);
        // 减法
        BigDecimal subtract = bigDecimal1.subtract(bigDecimal2);
        // 乘法
        BigDecimal multiply = bigDecimal1.multiply(bigDecimal2);
        // 除法
        BigDecimal divide = bigDecimal1.divide(bigDecimal2);
        System.out.println(plus);
        System.out.println(subtract);
        // 0E-45 是一个科学计数法的表示方式,表示的是非常靠近于零的数。此处的E-45是表示小数点位置,虽然数字为零,但由于内部存储的计算精度导致了这样的表示。
        // 修改输出格式以普通数字显示
        System.out.println(subtract.stripTrailingZeros().toPlainString());
        System.out.println(multiply);
        System.out.println(divide);
    }
}

打印结果:

 定义声明一个方法,可以对 double 类型的小数进行四舍五入的操作

示例:

import java.math.BigDecimal;
public class Test {
    public static void main(String[] args) {
        double i = 3.1415926;
        System.out.println(round(i,2));
    }
    /**
     * 
     * @param num 传入的 double 类型的数据
     * @param scale 保留位数
     * @return
     */
    public static double round(double num,int scale) {
        BigDecimal decimal = new BigDecimal(num);
        //进行除法操作,除以 1 来控制结果保留多少位小数
        BigDecimal result =
                decimal.divide(new BigDecimal(1), scale, BigDecimal.ROUND_HALF_UP);
        //把 BigDecimal 类型的结果转换为 double 类型返回
        return result.doubleValue();
    }
}

打印结果:

到此这篇关于JAVA 中的大数字操作类的文章就介绍到这了,更多相关java大数字操作类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redisson 分布式延时队列 RedissonDelayedQueue 运行流程

    Redisson 分布式延时队列 RedissonDelayedQueue 运行流程

    这篇文章主要介绍了Redisson分布式延时队列 RedissonDelayedQueue运行流程,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Java数据结构 递归之迷宫回溯案例讲解

    Java数据结构 递归之迷宫回溯案例讲解

    这篇文章主要介绍了Java数据结构递归之迷宫回溯案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 详细总结Java创建文件夹的方法及优缺点

    详细总结Java创建文件夹的方法及优缺点

    很多小伙伴都不知道如何用Java创建文件夹,今天给大家整理了这篇文章,文中有非常详细的方法介绍及方法的优缺点,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • 基于线程、并发的基本概念(详解)

    基于线程、并发的基本概念(详解)

    下面小编就为大家带来一篇基于线程、并发的基本概念(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 详解Java的Hibernate框架中的注解与缓存

    详解Java的Hibernate框架中的注解与缓存

    这篇文章主要介绍了详解Java的Hibernate框架中的注解与缓存,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • Spring Boot集成Redisson实现延迟队列

    Spring Boot集成Redisson实现延迟队列

    本文详细介绍了电商支付场景中利用Redisson的RDelayedQueue实现订单的延迟关闭功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • 浅谈一下Java为什么不能使用字符流读取非文本的二进制文件

    浅谈一下Java为什么不能使用字符流读取非文本的二进制文件

    这篇文章主要介绍了浅谈一下为什么不能使用字符流读取非文本的二进制文件,刚学Java的IO流部分时,书上说只能使用字节流去读取图片、视频等非文本二进制文件,不能使用字符流,否则文件会损坏,需要的朋友可以参考下
    2023-04-04
  • selenium-java实现自动登录跳转页面方式

    selenium-java实现自动登录跳转页面方式

    利用Selenium和Java语言可以编写一个脚本自动刷新网页,首先,需要确保Google浏览器和Chrome-Driver驱动的版本一致,通过指定网站下载对应版本的浏览器和驱动,在Maven项目中添加依赖,编写脚本实现网页的自动刷新,此方法适用于需要频繁刷新网页的场景,简化了操作,提高了效率
    2024-11-11
  • 使用ANT与YUI压缩js的实现方法

    使用ANT与YUI压缩js的实现方法

    本篇文章是对使用ANT与YUI压缩js的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Mybatis中多个对象包含同一个对象的处理操作

    Mybatis中多个对象包含同一个对象的处理操作

    这篇文章主要介绍了Mybatis中多个对象包含同一个对象的处理操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论