java - 如何在 BigDecimal (Java) 中存储无穷大?

标签 java algorithm exception bigdecimal infinity

我在返回 BigDecimal 值的方法中编写算法,但有时计算的结果将是 + 或 - 无穷大。
我不想让程序崩溃,而是想捕获异常并将无穷大作为值返回,就像方法返回 double 值时那样。

例如 Double.POSITIVE_INFINITY;

那么如何在 BigDecimal 中存储无穷大?或者还有其他方法吗?

public static BigDecimal myalgorithm(){

//code to store infinity in a BigDecimal
//return the BigDecimal holding infinity 

}

最佳答案

BigDecimal 没有无穷大的概念。我可以想到三个选项:

  1. 最干净 的方法可能是派生您自己的 MyBigDecimal 类,添加一个无穷大标志,告诉您实例是否包含无穷大,并覆盖其中的方法当您不持有无穷大时使用基类的版本,而当您持有无穷大时使用您自己的代码。

  2. 您可以在代码中使用 null 作为标志值,尽管这可能有点麻烦。例如:

    if (theBigDecimal == null) {
        // It's infinity, deal with that
    }
    else {
        // It's finite, deal with that
    }
    
  3. 如果您已经将 null 用于其他用途,您可以拥有一个 BigDecimal 实例,它实际上不包含无穷大,但您假装包含无穷大它,并使用 == 来检查它。例如:

    // In your class somewhere:
    static final BigDecimal INFINITE_BIG_DECIMAL = new BigDecimal(); // Value doesn't matter
    
    // Then:
    if (theBigDecimal == INFINITE_BIG_DECIMAL) {
        // It's infinity, deal with that
    }
    else {
        // It's finite, deal with that
    }
    

关于java - 如何在 BigDecimal (Java) 中存储无穷大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20814609/

相关文章:

java - 适用于 Android 的 SOAP 客户端

java - 如何使用 JSON 消除空值变量

Python 回溯字符串长度 n 来自字母表 {a,b,c} 与 #a=#b

java - 无法解析的日期 : "Apr 5, 2018" in Java

python - python处理用户的无效输入

java - PersistenceUnit vs PersistenceContext

java - Java 中的 JOptionPane

Python:如何在时间对象列表中找到连续的时间间隔?

json - 检测JSON数组中没有重复项的最快正确方法是什么?

python - 如何在 Python 3 中打印异常?