Как сохранить бесконечность в BigDecimal (Java)?
Я пишу алгоритмы внутри методов, которые возвращают BigDecimal значения, но время от времени вычисляемый результат будет + или - infinity.
Вместо сбоя программы я хотел бы поймать исключение и вернуть infinity как значение, как вы могли бы, если бы метод возвращал double.
например двойной.POSITIVE_INFINITY;
Итак, как сохранить бесконечность в BigDecimal? Или есть другой способ сделать это?
public static BigDecimal myalgorithm(){
//code to store infinity in a BigDecimal
//return the BigDecimal holding infinity
}
1 ответов
BigDecimal
не имеет понятия бесконечности. Я могу придумать три варианта:--9-->
The чистый подход, вероятно, чтобы получить свой собственный
MyBigDecimal
class, добавив флаг infinity, сообщающий вам, содержит ли экземпляр infinity, и переопределяя методы, к которым он будет иметь отношение (что было бы большинством из них, я думаю), используя версию базового класса, когда вы не держите infinity и свой собственный код, когда вы являются.-
можно использовать
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 }