Java BigDecimal比较不使用小数字

Java BigDecimal比较不使用小数字,java,max,bigdecimal,compareto,Java,Max,Bigdecimal,Compareto,我需要为一个人工智能项目比较非常小的数字。以下是我的方法: 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; } 有没有办法用compareTo方法来比

我需要为一个人工智能项目比较非常小的数字。以下是我的方法:

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;
    }

有没有办法用compareTo方法来比较我犯的这个小错误或简单错误?谢谢你的帮助

0e无论什么
仍然是0。它们都是零

E-932
之所以能够存活下来,是因为BigDecimal不仅存储数字,它还知道你的精度<代码>0E-917为0,但具有一定的精度

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


编辑:明确地说,
0E-917
不是“一个非常小的数字”它是零。精确性是有效的:一些计算是
0.00000000…000000
,有917个零。它可能是非零的,但如果是,它至少在917个零之后才有一个非零的数字,我没有计算那么远。这一点,您的BD实例根本无法知道(它只存储了918个零)。

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

E-932
之所以能够存活下来,是因为BigDecimal不仅存储数字,它还知道你的精度<代码>0E-917为0,但具有一定的精度

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

编辑:明确地说,
0E-917
不是“一个非常小的数字”它是零。精确性是有效的:一些计算是
0.00000000…000000
,有917个零。它可能是非零的,但如果是,它至少在917个零之后才有一个非零的数字,我没有计算那么远。这一点,您的BD实例完全没有办法知道(它只存储了918个零)

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