在 Java 里,BigDecimal 判相等不能只用 ==,而且**“任意精度整数”通常指 scale() == 0 的 BigDecimal**,但比较时仍要注意精度(scale)和值(value)的区别。
下面分情况说明。
compareToBigDecimal a = new BigDecimal("123456789012345678901234567890");
BigDecimal b = new BigDecimal("123456789012345678901234567890");
if (a.compareTo(b) == 0) {
// 数值相等(忽略 scale)
}
✅ 推荐用于“数值是否相等”
compareTo == 0 表示 数学意义上相等scale 影响new BigDecimal("10").compareTo(new BigDecimal("10.00")) == 0 // true
equalsa.equals(b)
⚠️ 不推荐用于数值比较
equals 要求:
new BigDecimal("10").equals(new BigDecimal("10.00")); // false
只有在你明确需要“完全一样(包括小数位)”时才用。
如果你的 BigDecimal 表示整数:
BigDecimal x = new BigDecimal("123456789012345678901234567890");
✅ 推荐做法:
x.compareTo(y) == 0
如果你还要确保它是“整数”:
x.scale() == 0 && x.compareTo(y) == 0
或者:
x.stripTrailingZeros().scale() <= 0
BigInteger 互转判等BigDecimal d = new BigDecimal("12345678901234567890");
BigInteger i = d.toBigIntegerExact(); // 若不是整数会抛异常
d.compareTo(new BigDecimal(i)) == 0
BigDecimal 判相等:永远用
compareTo == 0,不要用equals,更不要==
如果你有“整数 + 精度控制 / 金融金额 / 科学计算”的具体场景,我可以给你更合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。