问题描述
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 个零)。