JavaBigDecimalCompareTo不适用于小数

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

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

这是我的输出,返回值打印在第三个:

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 个零)。


以上是JavaBigDecimalCompareTo不适用于小数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>