结论:不能。
BigDecimal 不是用来处理“任意精度整数”的,而是任意精度的小数(定点数)。如果你只是要任意精度整数,应该用 BigInteger。
BigDecimal 表示:
任意精度的有符号十进制数(带小数点)
它由两部分组成:
例如:
BigDecimal bd = new BigDecimal("123.456");
// unscaledValue = 123456
// scale = 3
✅ 可以表示非常大的数
❌ 但不是纯整数类型
BigDecimal a = new BigDecimal("123456789123456789123456789");
这没问题,但底层仍然是:
unscaledValue = 123456789123456789123456789
scale = 0
BigDecimal a = new BigDecimal("1");
BigDecimal b = new BigDecimal("3");
a.divide(b); // ❌ ArithmeticException
✅ BigInteger 才是正确答案
BigInteger a = new BigInteger("123456789123456789123456789");
BigInteger b = new BigInteger("987654321987654321987654321");
BigInteger c = a.add(b);
特点:
| 类型 | 是否任意精度 | 是否整数 | 用途 |
|---|---|---|---|
int / long |
❌ | ✅ | 普通整数 |
BigInteger |
✅ | ✅ | 任意精度整数 |
BigDecimal |
✅ | ❌(可表示整数) | 高精度金额、小数 |
✅ 适合:
0.1 + 0.2)❌ 不适合:
BigDecimal 不是任意精度整数,BigInteger 才是。
BigDecimal 是“任意精度的小数”,不是“整数工具”。
如果你愿意,我可以帮你:
BigInteger 还是 BigDecimal免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。