在 Java 里,BigDecimal 并不是“任意精度整数”本身,而是任意精度的十进制浮点数(定点数)。你可能是把下面几个概念混在一起了,我分开说清楚。
任意精度整数指的是:
在 Java 中,表示任意精度整数的是:
java.math.BigInteger
示例:
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = a.multiply(a); // 精确计算
✅ BigInteger = 任意精度整数
BigDecimal 是:
任意精度的有符号十进制数(可带小数)
它的特点是:
示例:
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal c = a.add(b); // 0.3 精确
✅ BigDecimal = 任意精度十进制数(不是整数)
如果 BigDecimal 的小数位为 0,它可以表示整数,例如:
BigDecimal x = new BigDecimal("12345678901234567890");
但它底层仍然是:
BigInteger(未标度值)内部大概是这样:
value = unscaledValue × 10^(-scale)
例如:
new BigDecimal("123.45")
// unscaled = 12345
// scale = 2
| 说法 | 是否正确 | 说明 |
|---|---|---|
| BigDecimal 是任意精度整数 | ❌ | 它是任意精度十进制数 |
| BigInteger 是任意精度整数 | ✅ | 专门用于整数 |
| BigDecimal 能完全替代 double | ⚠️ | 能,但性能更低 |
| BigDecimal 能存无限大整数 | ❌ | 受内存限制 |
BigIntegerBigDecimaldouble如果你愿意,我也可以:
BigDecimal 内部结构图BigDecimal vs double 的误差示例BigDecimal 的坑(比如 new BigDecimal(0.1))你更想了解哪一部分?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。