Ich muss eine SUM() -Methode schreiben, die Arrays von Number-Objekten (Java) erhalten kann. Es könnten also mehrere Short-Objekte sein, dann ein paar Floats, dann ein BigDecimal.Wie kann ich einen Satz von Java Number-Objekten hinzufügen, um das genaueste Ergebnis zu erhalten?
Wenn alles ein Byte/Short/Integer/Long ist, sollte der zurückgegebene Wert ein Long sein.
Wenn alles ein Byte/Short/Integer/Long/Float/Double ist, sollte der zurückgegebene Wert ein Double sein.
Wenn es ein BigDecimal in der Mischung mit dem oben genannten gibt, dann sollte das Ergebnis ein BigDecimal sein. Und wenn ein BigInteger drin ist, dann bin ich mir nicht sicher, was/wie damit umzugehen ist, da jeder BigInteger unterschiedliche Werte für eine große Zahl haben kann.
Gegenwärtig sammle ich eine laufende Summe von Long (alle Byte/Short/Integer/Long), Double (alle Float/Double) und BigDecimal. Dann am Ende addiere in das was benutzt worden ist (ich habe 2 booleans, die das verfolgen) und gebe das zurück.
Es funktioniert, aber es ist nicht sauber. Gibt es einen leichteren Weg? Eine Möglichkeit, zwei Number-Objekte hinzuzufügen und das entsprechende Number-Objekt zurückzugeben?
Alle von Ihnen genannten Typen können genau als 'BigDecimal' dargestellt werden. Ich würde nur alle Eingaben in 'BigDecimal' konvertieren und hinzufügen. Die Antwort wird genau richtig sein und nicht nur genau. –
Es wird keinen sauberen Weg geben, dies zu tun; Java beabsichtigt nicht, dass Sie verschiedene 'Zahl'-Typen mischen, wie Sie es versuchen. –
@PaulBoddington - Ohne in die Details zu gehen, gibt es Dinge, die wir tun können, wenn wir wissen, dass es ein Long (dh keine Dezimalstellen) oder ein Double ist (muss nicht von BigDecimal konvertiert werden). Außerdem wollen wir schnelle Leistung und meistens ist alles lang oder doppelt. –