温馨提示×

温馨提示×

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

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

BigDecimal任意精度整数怎么用

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

在 Java 里 BigDecimal 并不是“任意精度整数”,而是任意精度的“十进制数”(可以带小数)。
如果你只想要任意精度整数,更合适的是 BigInteger。

下面分两种情况说明。


一、你真正想要的是「任意精度整数」→ 用 BigInteger

1️⃣ 创建

import java.math.BigInteger;

BigInteger a = new BigInteger("12345678901234567890");
BigInteger b = BigInteger.valueOf(100); // 小整数推荐

2️⃣ 基本运算

BigInteger sum = a.add(b);        // 加
BigInteger diff = a.subtract(b);  // 减
BigInteger prod = a.multiply(b);  // 乘
BigInteger quot = a.divide(b);    // 除(整除)
BigInteger rem = a.remainder(b);  // 取余

3️⃣ 比较

a.compareTo(b); // -1, 0, 1
a.equals(b);    // 注意:equals 比较值

4️⃣ 位运算(整数常用)

a.and(b);
a.or(b);
a.shiftLeft(1);  // 乘 2
a.shiftRight(1); // 除 2

✅ 适合场景

  • 超大整数(超过 long)
  • 阶乘、组合数、加密、ID 生成
  • 不需要小数

二、如果你一定要用 BigDecimal(带小数的任意精度)

1️⃣ 创建(⚠️不要用 double 构造)

BigDecimal a = new BigDecimal("0.1"); // ✅ 推荐
BigDecimal b = BigDecimal.valueOf(0.1); // ✅ 也安全

❌ 错误示例:

BigDecimal wrong = new BigDecimal(0.1); // 精度丢失

2️⃣ 基本运算

BigDecimal sum = a.add(b);
BigDecimal diff = a.subtract(b);
BigDecimal prod = a.multiply(b);
BigDecimal quot = a.divide(b, 10, RoundingMode.HALF_UP); // ⚠️必须指定精度和舍入

⚠️ BigDecimal 除法必须指定:

  • 小数位数
  • 舍入方式

否则会抛异常:

ArithmeticException: Non-terminating decimal expansion

3️⃣ 设置精度 / 舍入

BigDecimal r = a.setScale(2, RoundingMode.HALF_UP);

4️⃣ 比较

a.compareTo(b); // 推荐
a.equals(b);    // 会连精度一起比较(不推荐)

三、BigInteger vs BigDecimal 怎么选?

需求 推荐
任意精度整数 ✅ BigInteger
金额 / 小数 ✅ BigDecimal
位运算 ✅ BigInteger
高精度除法 ✅ BigDecimal

四、常见误区

❌ BigDecimal 不是“整数”
❌ 用 double 构造 BigDecimal
❌ 忘记指定除法精度


如果你愿意,可以把具体使用场景(比如:金额计算 / 大整数运算 / 阶乘 / 精度要求)发出来,我可以直接帮你写最合适的代码。

向AI问一下细节

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

AI
助
手