Java BigDecimal CompareTo 不适用于小数字

Java BigDecimal CompareTo Not Working with Small Numbers

我需要为人工智能项目比较极小的数字。这是我的方法:

private static int maximum(BigDecimal a1, BigDecimal a2){
    System.out.println(a1);
    System.out.println(a2);
    if (a1.compareTo(a2)<0){
        return 1;
    }else{
         return 0;
    }

这是我的输出,第 3 个打印的是 return 值:

0E-917
0E-912
0
0E-918
0E-921
0
0E-932
0E-933
0

有什么方法可以比较我用 compareTo 方法犯的这个小错误或一些简单错误的数字吗?感谢您的帮助!

0Ewhatever 仍然是 0。它们都是零。

E-932 甚至还存在的原因是因为 BigDecimal 不存储 只是 数字,它也知道你的精度; 0E-917 为 0,但具有一定的精度。

如规范所述,compareTo 检查实际值并忽略精度级别,因此,所有这些值彼此 100% 相等:它们都是 0。

编辑:需要说明的是,0E-917 不是“极小的数字”。 为零。那个精确的东西是有效的:一些计算是 0.00000000....000000,有 917 个零。它可能是非零的,但如果是,它只有在 至少 917 个零之后才有一个非零数字,我没有计算那么远。这个,你的BD实例绝对没有办法知道(它只存储了918个零)。