我需要为人工智能项目比较极小的数字。这是我的方法:
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 位:
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 个零)。
关于Java BigDecimal CompareTo 不适用于小数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66539860/