Java中如何使用300位及以上十进制的超大数字?
Java存储300位以上十进制超大数字的解决方案
支持的类型
JDK 内置的java.math.BigInteger类可以满足需求,它属于任意精度整数类,没有固定的数值上限,只要JVM内存充足,可支持存储任意长度的十进制整数,完全覆盖300位的使用场景。如果需要处理带小数的超大数字,可使用同包下的BigDecimal类。
核心使用说明
- 实例化方式:不能直接用整数字面量赋值(Java整数字面量最大仅支持到long类型上限),必须将超大数字转换为字符串传入构造方法
示例:BigInteger bigNum = new BigInteger("1234567890123456789012345678901234567890"); - 运算规则:
BigInteger是不可变类,所有运算操作都会返回新的BigInteger对象,不能直接使用+、-、*、/等运算符,需要调用对应方法:- 加法:
add(),示例:BigInteger sum = num1.add(num2); - 减法:
subtract(),示例:BigInteger difference = num1.subtract(num2); - 乘法:
multiply(),示例:BigInteger product = num1.multiply(num2); - 除法:
divide(),示例:BigInteger quotient = num1.divide(num2); - 取模:
mod(),示例:BigInteger remainder = num1.mod(num2); - 大小比较:
compareTo(),返回负整数、0、正整数分别对应前者小于、等于、大于后者,示例:int compareResult = num1.compareTo(num2);
- 加法:
- 类型转换:
- 转为完整数字字符串:直接调用
toString()方法即可 - 转为基础数值类型:可调用
longValue()、intValue()等方法,注意如果数值超过对应基础类型的范围,会出现精度溢出问题
- 转为完整数字字符串:直接调用
完整使用示例
import java.math.BigInteger; public class BigNumberDemo { public static void main(String[] args) { // 实例化两个300位以上的超大整数 BigInteger num1 = new BigInteger("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); BigInteger num2 = new BigInteger("987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210"); // 执行加法运算 BigInteger sum = num1.add(num2); // 输出运算结果 System.out.println("两数之和:" + sum); // 输出结果的数字位数 System.out.println("结果位数:" + sum.toString().length()); } }
内容的提问来源于stack exchange,提问作者Amr Alasmer
相关产品推荐
相关产品推荐

