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

这是我的输出,返回值打印在第 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/

相关文章:

java - 如何在运行时基于没有 XML 的 Spring 属性注入(inject)不同的服务

java - 为什么在 Android Studio 中使用 Firebase 数据库时 onClick 内的 "If Condition"不起作用?

java - 在JAVA中仅使用max和min函数找到三个随机数的中间数

mysql max函数使用

f# - 在 F# 中查找列表最大值的索引

java - Float 和 BigDecimal 精度差异

java - 如何使用 BigDecimals 进行除法

java - 如何制作我的 jar 的可分发批处理文件

java - JPA级联持久化

java - 如何使用 Java-8 Streams 将 n 维数组映射到另一种类型?