在 Java 里,BigDecimal 不是整数类型,它是“任意精度的十进制数(带小数位的)”。
如果你说的“任意精度整数”是指 大整数,那应该用 BigInteger;如果是 BigDecimal 里存的是整数值,也可以比较,只是要注意坑。
下面分两种情况说。
BigIntegerimport java.math.BigInteger;
BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = new BigInteger("987654321098765432109876543210");
int r = a.compareTo(b);
// r < 0 : a < b
// r == 0: a == b
// r > 0 : a > b
✅ BigInteger 专门用于任意精度整数
✅ 不要用 ==、equals 比较大小(语义不同)
BigDecimal 表示“整数值”时如何比较compareToBigDecimal a = new BigDecimal("100");
BigDecimal b = new BigDecimal("200");
int r = a.compareTo(b);
r < 0 :a < br == 0:数值相等r > 0 :a > b✅ 推荐方式
✅ 忽略精度/标度差异(如 1.0 和 1.00 视为相等)
equals ❌ 不推荐用于比较“值”BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("1.00");
a.equals(b); // false!
因为 equals 会比较:
BigIntegerBigDecimal a = new BigDecimal("12345678901234567890");
BigInteger i = a.toBigInteger(); // 忽略小数部分
⚠️ 如果 BigDecimal 有小数,会直接截断
| 操作 | 是否推荐 | 说明 |
|---|---|---|
compareTo |
✅ | 比较数值 |
equals |
❌ | 比较值和标度 |
== |
❌ | 比较对象引用 |
double 转 BigDecimal |
❌ | 精度问题 |
BigIntegerBigDecimalcompareTo如果你愿意,可以告诉我:
我可以给你更具体的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。