Как сохранить бесконечность в 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-->

  1. The чистый подход, вероятно, чтобы получить свой собственный MyBigDecimal class, добавив флаг infinity, сообщающий вам, содержит ли экземпляр infinity, и переопределяя методы, к которым он будет иметь отношение (что было бы большинством из них, я думаю), используя версию базового класса, когда вы не держите infinity и свой собственный код, когда вы являются.

  2. можно использовать null как значение флага в вашем коде, хотя это может быть немного больно. Например:

    if (theBigDecimal == null) {
        // It's infinity, deal with that
    }
    else {
        // It's finite, deal with that
    }
    
  3. если вы уже используете 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
    }