在 Java 里,BigDecimal 本身不是“任意精度整数”,它是任意精度的“十进制数(带小数点的数)”。如果你真正想要的是任意精度整数,通常应该分情况选:
java.math.BigInteger专门用于表示任意精度整数
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = a.add(BigInteger.valueOf(1));
适用场景
✅ 结论:
任意精度整数 → 用
BigInteger,不要用BigDecimal
java.math.BigDecimalBigDecimal price = new BigDecimal("19.99");
BigDecimal total = price.multiply(new BigDecimal("3"));
适用场景
double)⚠️ 注意:
new BigDecimal(0.1) // ❌ 不精确
new BigDecimal("0.1") // ✅ 精确
BigDecimal v = new BigDecimal("1.234").setScale(2, RoundingMode.HALF_UP);
// 1.23
BigDecimal result = a.divide(b, 10, RoundingMode.HALF_UP);
BigDecimal x = BigDecimal.valueOf(0.1); // ✅
| 需求 | 选择 |
|---|---|
| 任意精度整数 | BigInteger |
| 精确小数 | BigDecimal |
| 性能优先、允许误差 | double / long |
| 金额 | BigDecimal(String 构造) |
任意精度整数 → BigInteger
任意精度十进制 → BigDecimal
如果你能说下具体场景(比如:金额?算法?位数多大?),我可以直接给你推荐最合适的类型和写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。