温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用BigDecimal算任意精度整数

发布时间:2026-07-17 09:15:39 来源:亿速云 阅读:101 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 本身不是用来算任意精度整数的首选工具。
BigDecimal 设计目标是任意精度的“十进制小数”,而任意精度整数应该用 BigInteger。

下面分情况说明,并给你正确用法。


一、如果你真的只是要“任意精度整数”

✅ 正确做法:用 BigInteger

import java.math.BigInteger;

public class Demo {
    public static void main(String[] args) {
        BigInteger a = new BigInteger("123456789123456789123456789");
        BigInteger b = new BigInteger("987654321987654321987654321");

        BigInteger sum = a.add(b);
        BigInteger product = a.multiply(b);

        System.out.println(sum);
        System.out.println(product);
    }
}

常用运算

a.add(b)        // 加
a.subtract(b)   // 减
a.multiply(b)   // 乘
a.divide(b)     // 除(必须能整除,否则抛异常)
a.mod(b)        // 取模
a.pow(10)       // 指数
a.compareTo(b)  // 比较

✅ 特点

  • 整数精度无限(只受内存限制)
  • 性能比 BigDecimal 好
  • 不会引入小数误差

二、如果你“必须用 BigDecimal”(比如来自接口 / 数据库)

BigDecimal 也可以表示整数,只要不指定小数位。

1️⃣ 创建整数

BigDecimal a = new BigDecimal("123456789123456789123456789");
BigDecimal b = new BigDecimal("987654321987654321987654321");

⚠️ 不要用 new BigDecimal(double)

new BigDecimal(0.1)   // ❌ 会有精度问题
new BigDecimal("0.1") // ✅ 正确

2️⃣ 整数运算

BigDecimal sum = a.add(b);
BigDecimal product = a.multiply(b);

3️⃣ 除法(重点)

BigDecimal 做除法必须指定精度和舍入规则:

BigDecimal result = a.divide(b, 20, RoundingMode.HALF_UP);

如果是整数除法(整除):

BigDecimal result = a.divideToIntegralValue(b);

三、BigDecimal vs BigInteger 怎么选?

场景 推荐
任意精度整数 ✅ BigInteger
金额 / 金融计算 ✅ BigDecimal
整数 + 小数混合 ✅ BigDecimal
位运算 / 大数算法 ✅ BigInteger

四、常见坑总结

❌ 用 double 转 BigDecimal

new BigDecimal(0.1); // 错

✅ 用字符串

new BigDecimal("0.1");

❌ 不指定舍入直接 divide

a.divide(b); // 可能抛 ArithmeticException

✅ 指定

a.divide(b, 10, RoundingMode.HALF_UP);

五、一句话总结

✅ 任意精度整数 → 用 BigInteger
✅ 需要小数或金额 → 用 BigDecimal

如果你有具体场景(比如阶乘、幂运算、金额计算、进制转换),我可以给你更针对性的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手