温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java BigDecimal任意精度整数怎么判相等

发布时间:2026-10-02 19:39:20 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 判相等不能只用 ==,而且**“任意精度整数”通常指 scale() == 0 的 BigDecimal**,但比较时仍要注意精度(scale)和值(value)的区别。

下面分情况说明。


一、最常见、最推荐:compareTo

BigDecimal 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
    

二、严格相等:equals

a.equals(b)

⚠️ 不推荐用于数值比较

equals 要求:

  • 值相等
  • scale 也必须相等
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,更不要 ==

如果你有“整数 + 精度控制 / 金融金额 / 科学计算”的具体场景,我可以给你更合适的写法。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手