我是靠谱客的博主 积极滑板,最近开发中收集的这篇文章主要介绍记录一个BigDecimal关于0值相等比较的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

BigDecimal a = new BigDecimal("0.0");
a.equals(BigDecimal.ZERO) // false
a.compareTo(BigDecimal.ZERO) == 0 // true

原因:

// BigDecimal#equals 源码
public boolean equals(Object x) {
    if (!(x instanceof BigDecimal))
        return false;
    BigDecimal xDec = (BigDecimal) x;
    if (x == this)
        return true;
    if (scale != xDec.scale)  // 此处会先比较小数位数,如果小数位数不一致直接返回false
        return false;
    long s = this.intCompact;
    long xs = xDec.intCompact;
    if (s != INFLATED) {
        if (xs == INFLATED)
            xs = compactValFor(xDec.intVal);
        return xs == s;
    } else if (xs != INFLATED)
        return xs == compactValFor(this.intVal);

    return this.inflated().equals(xDec.inflated());
}
// BigDecimal#compareTo 源码
public int compareTo(BigDecimal val) {
    // Quick path for equal scale and non-inflated case.
    if (scale == val.scale) {
        long xs = intCompact;
        long ys = val.intCompact;
        if (xs != INFLATED && ys != INFLATED)
            return xs != ys ? ((xs > ys) ? 1 : -1) : 0;
    }
    int xsign = this.signum();
    int ysign = val.signum();
    if (xsign != ysign)
        return (xsign > ysign) ? 1 : -1;
    if (xsign == 0)
        return 0;
    int cmp = compareMagnitude(val);
    return (xsign > 0) ? cmp : -cmp;
}

最后

以上就是积极滑板为你收集整理的记录一个BigDecimal关于0值相等比较的问题的全部内容,希望文章能够帮你解决记录一个BigDecimal关于0值相等比较的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部