我在返回BigDecimal值的方法中编写算法,但现在计算的结果将是+或 - 无穷大。
而不是程序崩溃我想捕获异常并返回无穷大作为一个值,就像方法返回一个双倍的方式。
例如Double.POSITIVE_INFINITY;
那么如何在BigDecimal中存储无穷大?或者还有另一种方法吗?
public static BigDecimal myalgorithm(){
//code to store infinity in a BigDecimal
//return the BigDecimal holding infinity
}
答案 0 :(得分:12)
BigDecimal
没有无限的概念。我可以想到三个选择:
最干净的方法可能是派生你自己的MyBigDecimal
类,添加一个无穷大标志,告诉你实例是否包含无穷大,并覆盖它的方法。相关的(我认为这是其中大部分内容),当你没有持有无穷大时使用基类的版本和你自己的代码。
您可以在代码中使用null
作为标记值,尽管这可能有点痛苦。 E.g:
if (theBigDecimal == null) {
// It's infinity, deal with that
}
else {
// It's finite, deal with that
}
如果您已经在使用null
进行其他操作,那么您可能会有一个BigDecimal
实例,该实例实际上不包含无穷大,但您假装包含它,并使用{{ 1}}检查它。 E.g:
==
答案 1 :(得分:0)
解决该问题的方法是,在这种情况下,仅使用非常大的数字:
BigDecimal.valueOf(negative ? Double.MIN_VALUE : Double.MAX_VALUE)
由于BigDecimal没有实际的最大值或最小值,因此可以使用double值。
这种方法的重要之处在于,它并不能真正解决表示无穷大的问题,但是根据用例的不同,它可以很好地解决问题。我将其用于与上述相同的用例。
实际上,在对intValue进行调用时,double会执行相同的操作。在这种情况下,它将只代表最大整数。