在 Java 里,BigDecimal 本身表示的是“任意精度的十进制数”,而不是“任意精度整数”。如果你说的是**“任意精度整数相加”**,更合适的是用 BigInteger;如果你确实是用 BigDecimal 来表示整数(比如没有小数位的金额),也可以直接加。
下面分情况说明。
BigInteger(推荐,真正的任意精度整数)import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = new BigInteger("987654321098765432109876543210");
BigInteger sum = a.add(b);
System.out.println(sum);
}
}
✅ 适合:
BigDecimal 表示“整数”并相加import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("123456789012345678901234567890");
BigDecimal b = new BigDecimal("987654321098765432109876543210");
BigDecimal sum = a.add(b);
System.out.println(sum);
}
}
⚠️ 注意:
BigDecimal 加法不会丢失精度new BigDecimal(double),会有精度问题如果你希望结果是整数、并且不被小数干扰:
BigDecimal sum = a.add(b)
.setScale(0, RoundingMode.UNNECESSARY);
或者明确舍入:
BigDecimal sum = a.add(b)
.setScale(0, RoundingMode.DOWN);
| 场景 | 推荐 |
|---|---|
| 纯整数、超大数 | BigInteger |
| 金额、需要小数 | BigDecimal |
| 高性能整数运算 | long(不够再用 BigInteger) |
如果你能说一下具体用途(比如:金额计算?算法题?超大 ID?),我可以给你更合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。