温馨提示×

温馨提示×

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

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

java BigDecimal任意精度整数如何算

发布时间:2026-09-12 06:04:54 来源:亿速云 阅读:101 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 本身并不是“任意精度整数”,它是任意精度的十进制浮点数(可以指定 scale 和 rounding mode)。
如果你说的是**“任意精度整数计算”**,通常有两种理解,我分别说明。


一、如果你想要「任意精度整数」:用 BigInteger

Java 标准库中真正表示任意精度整数的是:

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 做整数计算”

1. 设置 scale = 0

BigDecimal a = new BigDecimal("12345678901234567890");
BigDecimal b = new BigDecimal("9876543210");

BigDecimal result = a.add(b)
                     .setScale(0, RoundingMode.UNNECESSARY);

RoundingMode.UNNECESSARY 表示:结果必须是整数,否则抛异常


2. 精确除法(必须整除)

BigDecimal a = new BigDecimal("100");
BigDecimal b = new BigDecimal("4");

BigDecimal r = a.divide(b, 0, RoundingMode.UNNECESSARY);

⚠️ 如果除不尽,会抛 ArithmeticException


三、BigDecimal vs BigInteger 怎么选?

场景 推荐
金额、需要小数 BigDecimal
纯整数、超大数 BigInteger
整数但来自 BigDecimal toBigInteger()
BigInteger i = bigDecimal.toBigInteger();

四、常见坑

1. 不要用 double 构造 BigDecimal

new BigDecimal(0.1) // ❌ 精度问题
new BigDecimal("0.1") // ✅

2. BigDecimal 不可变

每次运算都返回新对象


五、总结一句话

任意精度整数 → 用 BigInteger
任意精度十进制 → 用 BigDecimal(可限制为整数)

如果你能说下具体场景(比如:大数阶乘?金额计算?模幂?),我可以给你更针对性的代码。

向AI问一下细节

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

AI
助
手