Wie bewahrt man die Unendlichkeit in eine BigDecimal (Java)?
Ich bin im schreiben von algorithmen innerhalb von Methoden, die Rückkehr BigDecimal-Werte, aber hin und wieder das Ergebnis berechnet werden, wird + oder - unendlich.
Anstatt das Programm abstürzt, würde ich mag, um die Ausnahme zu fangen und zurück Unendlichkeit als einen Wert, wie Sie könnten, wenn die Methode wurde wieder ein Doppel.
zB Verdoppeln.POSITIVE_INFINITY;
Also wie Speichere ich die Unendlichkeit in eine BigDecimal? Oder gibt es einen anderen Weg, dies zu tun?
public static BigDecimal myalgorithm(){
//code to store infinity in a BigDecimal
//return the BigDecimal holding infinity
}
BigDecimal
keine Möglichkeit hat, repräsentieren die Unendlichkeit.- Wann würde das Ergebnis berechnet werden, die + oder - unendlich?
BigDecimal.divide
löst eine arithmetic-exception, wenn der divisor null ist. Andere als die, wie würden Sie berechnen Sie + oder - unendlich? - Ja, Sie sehen, aufgrund der Natur der algorithmen, kann es sein, Divisionen durch null, manchmal. Derzeit bin ich nur auf den Fang der arithmetische Ausnahme und Rücksendung + oder - 999
Du musst angemeldet sein, um einen Kommentar abzugeben.
BigDecimal
nicht das Konzept der Unendlichkeit. Ich denke, der kann drei Optionen:Den saubersten Ansatz ist wahrscheinlich zur Ableitung Ihrer eigenen
MyBigDecimal
Klasse, das hinzufügen einer infinity flag sage Ihnen, wenn die Instanz enthält die Unendlichkeit, und die Methoden überschreiben, die ihm relevant sein (was die meisten von Ihnen, würde ich meinen), mit dem base Klasse s-version, wenn Sie nicht mit der Unendlichkeit und Ihrem eigenen code, wenn Sie sind.Könnten Sie
null
als flag-Wert in Ihrem code, dass zwar möglicherweise ein bisschen Schmerz. E. g.:Wenn Sie bereits mit
null
für etwas anderes haben, könnte eineBigDecimal
Instanz, die nicht tatsächlich enthalten die Unendlichkeit, die Sie aber so tun, containts, und verwenden Sie==
zu überprüfen, es. E. g.:BigDecimal
Grund (beliebiger Genauigkeit, zum Beispiel).BigDecimal
und fügen Sie das Konzept der Klasse. Dann kann man (z.B.) haben einen class-wideMyBigDecimal.Infinity
Instanz, und in (sagen wir) diedivide
Methode:if (this.isInfinite) { return MyBigDecimal.Infinity; }
dannreturn super.divide(divisor);
(für die nicht-unendlicher Fall). (Vielleicht wollen Sie auch den Fall behandeln, der divisor wird unendlich, natürlich.)Einen Ansatz für das problem wäre, nur eine wirklich große Nummer in diesem Fall:
Als BigDecimal nicht eine echte maximalen oder minimalen Wert, den Sie verwenden können, diejenigen, die der doppelten.
Wichtig bei diesem Ansatz ist, dass es nicht wirklich lösen das problem, die unendlich, aber je nach Anwendungsfall kann es lösen das problem gut genug. Ich benutzte es für den gleichen Anwendungsfall wie Sie oben erwähnt habe.
Doppelt bringt mehr oder weniger die gleichen, die beim aufrufen intValue auf Sie. In diesem Fall wird es nur zeigen die maximal integer.