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

时间:2013-12-28 12:35:32

标签: java algorithm exception bigdecimal infinity

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

例如Double.POSITIVE_INFINITY;

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

public static BigDecimal myalgorithm(){

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

}

2 个答案:

答案 0 :(得分:12)

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

  1. 最干净的方法可能是派生你自己的MyBigDecimal类,添加一个无穷大标志,告诉你实例是否包含无穷大,并覆盖它的方法。相关的(我认为这是其中大部分内容),当你没有持有无穷大时使用基类的版本和你自己的代码。

  2. 您可以在代码中使用null作为标记值,​​尽管这可能有点痛苦。 E.g:

    if (theBigDecimal == null) {
        // It's infinity, deal with that
    }
    else {
        // It's finite, deal with that
    }
    
  3. 如果您已经在使用null进行其他操作,那么您可能会有一个BigDecimal实例,该实例实际上不包含无穷大,但您假装包含它,并使用{{ 1}}检查它。 E.g:

    ==

答案 1 :(得分:0)

解决该问题的方法是,在这种情况下,仅使用非常大的数字:

BigDecimal.valueOf(negative ? Double.MIN_VALUE : Double.MAX_VALUE)

由于BigDecimal没有实际的最大值或最小值,因此可以使用double值。

这种方法的重要之处在于,它并不能真正解决表示无穷大的问题,但是根据用例的不同,它可以很好地解决问题。我将其用于与上述相同的用例。

实际上,在对intValue进行调用时,double会执行相同的操作。在这种情况下,它将只代表最大整数。