在 Java 里,BigDecimal 并不是“任意精度整数”,而是任意精度的“十进制浮点数”(可以带小数点、可以非常大)。
如果你说的是任意精度整数,那通常是用 BigInteger;如果是 BigDecimal 内部怎么存任意精度数值,下面分开说。
✅ 正确选择:java.math.BigInteger
BigInteger a = new BigInteger("123456789012345678901234567890");
特点:
int[] 存二进制补码(base 2^32)BigDecimal b = new BigDecimal("123456789012345678901234567890");
✅ 这是允许的
✅ 小数位为 0,但本质仍是十进制数
BigDecimal 的本质是:
value = unscaledValue × 10^(-scale)
BigInteger intVal; // 未缩放的整数值
int scale; // 小数位数
BigDecimal bd = new BigDecimal("123.456");
内部等价于:
unscaledValue = 123456
scale = 3
即:
123456 × 10^-3 = 123.456
unscaledValue 是 BigInteger❌ BigDecimal 不是“浮点型”
new BigDecimal(double))❌ 不要用 double 构造 BigDecimal
new BigDecimal(0.1) // ❌ 不精确
new BigDecimal("0.1") // ✅ 精确
| 需求 | 用什么 |
|---|---|
| 任意精度整数 | BigInteger |
| 任意精度十进制数 | BigDecimal |
| BigDecimal 怎么存 | BigInteger + scale |
如果你是想问 “BigDecimal 在数据库 / 文件 / 网络里怎么存”,可以继续问,我可以给你具体方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。