bigdecimal比较值的大小问题

比如说三个值,6和10还有0:

BigDecimal ten = BigDecimal.valueOf(10);
BigDecimal zero = BigDecimal.ZERO;

clipboard.png

比较结果:

6小于10结果是-1是对的
clipboard.png

然后问题来了,6怎么比0还小了呢?
clipboard.png

阅读 4.5k
2 个回答

因为你写错了…

    public static void main(String[] args) {
        BigInteger ten = BigInteger.valueOf(10L);
        BigInteger six = BigInteger.valueOf(6L);
        BigInteger zero = ZERO;

        System.out.println(ten.compareTo(six));  // 1
        System.out.println(zero.compareTo(six)); // -1
    }

java.math.BigInteger#compareTo的文档注释

@return -1, 0 or 1 as this BigInteger is numerically less than, equal to, or greater than {@code val}.

返回-1的时候是当前值小于比较值,你的两次比较的结论应该是变量ten小于比较参数以及变量zero小于比较参数

如果比较参数一直是6的话,有问题的应该是第一次比较。

请检查第一次比较的时候比较参数的值,JDK的代码不至于低级到一个比较器都写错的地步

    public static void main(String[] args) {
        System.out.println(BigInteger.TEN.compareTo(BigInteger.valueOf(6)));//1
        System.out.println(BigInteger.ZERO.compareTo(BigInteger.valueOf(6)));//-1
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题