Java BigInteger和BigDecimal大数据类的用法(附带实例)
在 Java 程序中对货币等大值数据进行计算时,int、long、float 和 double 等基本数据类型在精度方面就不能满足需求了。为此,Java 提供了两个大数字类,分别是 java.math.BigInteger 和 java.math.BigDecimal,这两个类都继承自 java.lang.Number 抽象类,如下图所示。

图 1 大数字类图
BigInteger提供多种方法,下面列举几个常用的方法:
示例代码如下:
BigDecimal 提供多种方法,下表列举了几个常用的方法。
示例代码如下:

图 1 大数字类图
Java BigInteger类
java.math.BigInteger 是不可变的任意精度的大整数。其构造方法有很多,其中字符串参数的构造方法有两个:- BigInteger(String val):将十进制字符串 val 转换为 BigInteger 对象;
- BigInteger(String val, int radix):按照指定基数 radix 将字符串 val 转换为 BigInteger 对象。
BigInteger提供多种方法,下面列举几个常用的方法:
方法 | 功能 |
---|---|
BigInteger add(BigInteger val) | 加运算,当前对象数字加参数 val。 |
BigInteger subtract(BigInteger val) | 减运算,当前对象数字减参数 val。 |
BigInteger multiply(BigInteger val) | 乘运算,当前对象数字乘参数 val。 |
BigInteger divide(BigInteger val) | 除运算,当前对象数字除以参数 val。 |
示例代码如下:
import java.math.BigInteger; public class Main { public static void main(String[] args) { // 创建 BigInteger 对象 BigInteger num1 = new BigInteger("123456789012345678901234567890"); BigInteger num2 = new BigInteger("9876543210987654321098765432210"); // 执行基本的算术运算 BigInteger sum = num1.add(num2); BigInteger difference = num1.subtract(num2); BigInteger product = num1.multiply(num2); BigInteger quotient = num1.divide(num2); // 显示结果 System.out.println("数 1:" + num1); System.out.println("数 2:" + num2); System.out.println("和:" + sum); System.out.println("差:" + difference); System.out.println("积:" + product); System.out.println("商:" + quotient); } }程序运行结果如下:
数 1:123456789012345678901234567890
数 2:9876543210987654321098765432210
和:111111111101111111101111111111100
差:-864197532086419753208641975320
积:121932631137021795226185032733622923322237463801111263526900
商:0
Java BigDecimal类
java.math.BigDecimal 也是不可变的任意精度的有符号十进制数。其构造方法有很多,如下表所示。构造方法 | 功能 |
---|---|
BigDecimal(BigInteger val) | 将 BigInteger 对象 val 转换为 BigDecimal 对象。 |
BigDecimal(double val) | 将 double 转换为 BigDecimal 对象,参数 val 是 double 类型的二进制浮点值准确的十进制表示形式。 |
BigDecimal(int val) | 将 int 转换为 BigDecimal 对象。 |
BigDecimal(long val) | 将 long 转换为 BigDecimal 对象。 |
BigDecimal(String val) | 将字符串表示数字形式转换为 BigDecimal 对象。 |
BigDecimal 提供多种方法,下表列举了几个常用的方法。
方法 | 功能 |
---|---|
BigDecimal add(BigDecimal val) | 加运算,当前对象数值加参数 val。 |
BigDecimal subtract(BigDecimal val) | 减运算,当前对象数值减参数 val。 |
BigDecimal multiply(BigDecimal val) | 乘运算,当前对象数值乘参数 val。 |
BigDecimal divide(BigDecimal val) | 除运算,当前对象数值除以参数 val。 |
BigDecimal divide(BigDecimal val, int roundingMode) | 除运算,当前对象数值除以参数 val。roundingMode 为要应用的舍入模式。 |
示例代码如下:
import java.math.BigDecimal; public class Main { public static void main(String[] args) { // 创建 BigDecimal 对象 BigDecimal num1 = new BigDecimal("12345678901234567890123456789.123456789"); BigDecimal num2 = new BigDecimal("98765432109876543210987654321.987654321"); // 执行基本的算术运算 BigDecimal sum = num1.add(num2); BigDecimal difference = num1.subtract(num2); BigDecimal product = num1.multiply(num2); BigDecimal quotient = num1.divide(num2, 10, BigDecimal.ROUND_HALF_UP); // ① // 显示结果 System.out.println("数 1:" + num1); System.out.println("数 2:" + num2); System.out.println("和:" + sum); System.out.println("差:" + difference); System.out.println("积:" + product); System.out.println("商:" + quotient); } }运行结果如下:
数 1:12345678901234567890123456789.123456789
数 2:98765432109876543210987654321.987654321
和:111111111011111111101111111111.111111110
差:-86419753208641975320864197532.864197532
积:1219326311370217952261850327360615759547340344433609205911.347203169112635269
商:0.1249999989