我正在编写返回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
}