gpt4 book ai didi

Java BigDecimal CompareTo 不适用于小数字

转载 作者:行者123 更新时间:2023-12-02 16:16:29 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com