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

例如Double.POSITIVE_INFINITY;

那么如何在BigDecimal中存储无穷大?还是有另一种方法?

public static BigDecimal myalgorithm(){

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

}

最佳答案

BigDecimal没有无限的概念。我可以想到三种选择:

  • 最干净的方法可能是派生您自己的MyBigDecimal类,添加一个无穷大标志来告诉您该实例是否包含无穷大,并覆盖与之相关的方法(我想这将是大多数方法),使用当您不持有无穷大时,使用基类的版本;当您持有无穷时,使用您自己的代码。
  • 您可以将null用作代码中的标志值,尽管这可能会有些麻烦。例如。:
    if (theBigDecimal == null) {
        // It's infinity, deal with that
    }
    else {
        // It's finite, deal with that
    }
    
  • 如果您已经在使用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
    }
    
  • 10-07 20:56