java 如何计算大数
使用 BigInteger 类处理大整数
Java 的 java.math.BigInteger 类专为处理任意精度的整数设计。适用于超出 long 范围的数值运算。
初始化
BigInteger bigInt1 = new BigInteger("12345678901234567890");
BigInteger bigInt2 = BigInteger.valueOf(987654321L);
基本运算
- 加法:
bigInt1.add(bigInt2) - 减法:
bigInt1.subtract(bigInt2) - 乘法:
bigInt1.multiply(bigInt2) - 除法:
bigInt1.divide(bigInt2) - 取模:
bigInt1.mod(bigInt2)
示例代码
BigInteger sum = bigInt1.add(bigInt2);
System.out.println("Sum: " + sum);
使用 BigDecimal 类处理高精度浮点数
java.math.BigDecimal 适用于需要高精度的浮点数运算,避免双精度浮点数的精度丢失问题。
初始化
BigDecimal decimal1 = new BigDecimal("123.4567890123456789");
BigDecimal decimal2 = BigDecimal.valueOf(987.654321);
运算与精度控制
- 加法:
decimal1.add(decimal2) - 减法:
decimal1.subtract(decimal2) - 乘法:
decimal1.multiply(decimal2) - 除法(需指定舍入模式):
decimal1.divide(decimal2, RoundingMode.HALF_UP);
示例代码
BigDecimal product = decimal1.multiply(decimal2);
System.out.println("Product: " + product);
性能优化与注意事项
- 不可变性:
BigInteger和BigDecimal对象不可变,每次运算生成新对象。频繁操作时需注意内存开销。 - 字符串初始化:直接传递字符串参数避免二进制浮点数误差。
- 舍入模式:除法运算必须明确指定舍入模式(如
RoundingMode.HALF_UP),否则可能抛出ArithmeticException。
性能对比示例

// 避免重复创建对象
BigInteger result = BigInteger.ONE;
for (int i = 1; i <= 100; i++) {
result = result.multiply(BigInteger.valueOf(i));
}
其他应用场景
- 加密算法:大素数生成、模幂运算(如
modPow方法)。 - 科学计算:精确的阶乘、组合数计算。
- 财务计算:避免浮点数误差的货币运算。
通过合理选择 BigInteger 或 BigDecimal,可高效解决 Java 中的大数计算问题。






