在 Java 里,BigDecimal 本身不是“任意精度整数”,它是任意精度的十进制浮点数(可定点)。
如果你要的是任意精度整数计算,通常有两种选择:
BigInteger如果你只做整数运算(加、减、乘、除、取模、幂等),应该用:
import java.math.BigInteger;
BigInteger a = new BigInteger("12345678901234567890123456789");
BigInteger b = new BigInteger("987654321987654321");
// 加
BigInteger sum = a.add(b);
// 减
BigInteger diff = a.subtract(b);
// 乘
BigInteger prod = a.multiply(b);
// 除(整除)
BigInteger quotient = a.divide(b);
// 取模
BigInteger mod = a.mod(b);
// 幂
BigInteger pow = a.pow(100);
// 最大公约数
BigInteger gcd = a.gcd(b);
✅ BigInteger 才是 Java 中的“任意精度整数”
BigDecimal 做“定点/高精度十进制计算”如果你需要小数但精度不能丢(如金额),用 BigDecimal:
import java.math.BigDecimal;
import java.math.RoundingMode;
BigDecimal a = new BigDecimal("1.23456789123456789");
BigDecimal b = new BigDecimal("2.345");
// 加
BigDecimal sum = a.add(b);
// 减
BigDecimal diff = a.subtract(b);
// 乘
BigDecimal prod = a.multiply(b);
// 除(必须指定精度和舍入)
BigDecimal div = a.divide(b, 10, RoundingMode.HALF_UP);
⚠️ 注意:
new BigDecimal(0.1)(用 double 构造会丢精度)scale + RoundingMode如果你想用 BigDecimal 当整数:
BigDecimal a = new BigDecimal("123456789123456789");
BigDecimal b = new BigDecimal("987654321");
BigDecimal result = a.multiply(b)
.setScale(0, RoundingMode.UNNECESSARY);
但这种情况 直接用 BigInteger 更好。
| 需求 | 推荐类 |
|---|---|
| 任意精度整数 | ✅ BigInteger |
| 高精度小数 / 金额 | ✅ BigDecimal |
| 高性能整数 | ❌ 不要用 BigDecimal |
如果你能说具体场景(比如:大数阶乘?RSA?金额计算?),我可以直接给你最合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。