Was ist der beste Weg, um ein Double in ein Long ohne Casting umzuwandeln?
Beispielsweise:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
java
type-conversion
Schlitten
quelle
quelle
myLong == (long)(myDouble + 1)
womyLong
equalsmyDouble
evaluieren zutrue
Double.longValue();
) ist immer noch nützlich, wenn Sie doppelte Werte von Dingen wie einer Arrayliste wie dieser haben,ArrayList<Double>
da Sie einen Fehler erhalten, der nicht gewirkt werden kann. Ich sage das nur für jeden, der hierher gekommen ist und ein etwas anderes Problem hatte.Antworten:
Angenommen, Sie sind zufrieden mit dem Abschneiden in Richtung Null, dann werfen Sie einfach:
Dies ist schneller als das Durchlaufen der Wrapper-Klassen - und was noch wichtiger ist, es ist besser lesbar. Wenn Sie eine andere Rundung als "immer gegen Null" benötigen, benötigen Sie etwas komplizierteren Code.
quelle
... und hier ist der Rundungsweg, der nicht abschneidet. Beeilte sich, es im Java API-Handbuch nachzuschlagen:
quelle
Der bevorzugte Ansatz sollte sein:
Aus der Double-Dokumentation (Java Platform SE 7) :
quelle
(new Double(d)).longValue()
Intern wird nur eine Besetzung durchgeführt, sodass es keinen Grund gibt, ein Double-Objekt zu erstellen.quelle
Die Guava Math-Bibliothek verfügt über eine Methode, die speziell für die Konvertierung eines Double in ein Long entwickelt wurde:
Mit können Sie
java.math.RoundingMode
das Rundungsverhalten festlegen.quelle
Wenn Sie den starken Verdacht haben, dass das DOPPELTE tatsächlich LANG ist, und Sie möchten
1) Den GENAUEN Wert als LANG erfassen
2) Wirf einen Fehler, wenn er nicht lang ist
Sie können so etwas versuchen:
Long ist eine Teilmenge von Double, sodass Sie möglicherweise seltsame Ergebnisse erzielen, wenn Sie unwissentlich versuchen, ein Double zu konvertieren, das außerhalb des Bereichs von Long liegt:
quelle
Long is a subset of Double
ist nicht genau. Die Anzahl der signifikanten Stellen für Long ist größer als Double. Daher können einige von Long gehaltene Informationen bei der Konvertierung in Double verloren gehen. Beispiel = tio.run/…Möchten Sie eine binäre Konvertierung wie haben
quelle
Einfach durch folgendes:
quelle
Einfach ausgedrückt ist das Casting effizienter als das Erstellen eines Double-Objekts.
quelle