在 Java 里,BigDecimal 本身并不是“任意精度整数”,它是任意精度的十进制浮点数(可以指定 scale 和 rounding mode)。
如果你说的是**“任意精度整数计算”**,通常有两种理解,我分别说明。
BigIntegerJava 标准库中真正表示任意精度整数的是:
import java.math.BigInteger;
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = new BigInteger("987654321098765432109876543210");
BigInteger sum = a.add(b);
BigInteger product = a.multiply(b);
BigInteger mod = a.mod(b);
| 运算 | 方法 |
|---|---|
| 加 | add |
| 减 | subtract |
| 乘 | multiply |
| 除 | divide |
| 取模 | mod |
| 幂 | pow |
| 最大公约数 | gcd |
✅ 不会有溢出问题
BigDecimal a = new BigDecimal("12345678901234567890");
BigDecimal b = new BigDecimal("9876543210");
BigDecimal result = a.add(b)
.setScale(0, RoundingMode.UNNECESSARY);
RoundingMode.UNNECESSARY 表示:结果必须是整数,否则抛异常
BigDecimal a = new BigDecimal("100");
BigDecimal b = new BigDecimal("4");
BigDecimal r = a.divide(b, 0, RoundingMode.UNNECESSARY);
⚠️ 如果除不尽,会抛 ArithmeticException
| 场景 | 推荐 |
|---|---|
| 金额、需要小数 | BigDecimal |
| 纯整数、超大数 | BigInteger |
| 整数但来自 BigDecimal | toBigInteger() |
BigInteger i = bigDecimal.toBigInteger();
double 构造 BigDecimalnew BigDecimal(0.1) // ❌ 精度问题
new BigDecimal("0.1") // ✅
每次运算都返回新对象
任意精度整数 → 用
BigInteger
任意精度十进制 → 用BigDecimal(可限制为整数)
如果你能说下具体场景(比如:大数阶乘?金额计算?模幂?),我可以给你更针对性的代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。