Ich stehe vor einem Problem im Zusammenhang mit der Konvertierung double
in float
. Eigentlich speichere ich einen Float-Typ 23423424666767
in einer Datenbank, aber wenn wir Daten aus der Datenbank im folgenden Code erhalten, getInfoValueNumeric()
ist er vom double
Typ. Der Wert, den wir erhalten, ist in der 2.3423424666767E13
Form.
Wie erhalten wir also Formatdaten float
wie 23423424666767
?
2.3423424666767E13 to 23423424666767
public void setInfoValueNumeric(java.lang.Double value) {
setValue(4, value);
}
@javax.persistence.Column(name = "InfoValueNumeric", precision = 53)
public java.lang.Double getInfoValueNumeric() {
return (java.lang.Double) getValue(4);
}
float
hat nicht genug Genauigkeit für solche Zahlen wie 23423424666767. Es kann nur auf ~ 7 Dezimalstellen genau seinAntworten:
Wirf einfach dein Double auf einen Schwimmer.
double d = getInfoValueNumeric(); float f = (float)d;
Beachten Sie auch, dass die primitiven Typen NICHT unendlich viele Zahlen speichern können:
float range: from 1.40129846432481707e-45 to 3.40282346638528860e+38 double range: from 1.7e–308 to 1.7e+308
quelle
Ich empfehle Ihnen, den in der Datenbank gespeicherten Wert als BigDecimal-Typ abzurufen:
BigDecimal number = new BigDecimal("2.3423424666767E13"); int myInt = number.intValue(); double myDouble = number.doubleValue(); // your purpose float myFloat = number.floatValue();
BigDecimal bietet Ihnen viele Funktionen.
quelle
Konvertieren
Double
inFloat
public static Float convertToFloat(Double doubleValue) { return doubleValue == null ? null : doubleValue.floatValue(); }
Konvertieren
double
inFloat
public static Float convertToFloat(double doubleValue) { return (float) doubleValue; }
quelle
Dies ist ein guter Weg, um es zu tun:
Double d = 0.5; float f = d.floatValue();
Wenn Sie d als primitiven Typ haben, fügen Sie einfach eine Zeile hinzu:
double d = 0.5; Double D = Double.valueOf(d); float f = D.floatValue();
quelle
Sie können einen Dezimalformatierer zum Formatieren von Dezimalzahlen verwenden.
double d = 2.3423424666767E13; DecimalFormat decimalFormat = new DecimalFormat("#"); System.out.println(decimalFormat.format(d));
Ausgabe: 23423424666767
quelle
format
-Methode, die ein String-Objekt zurückgibt.Die Umstellung von Double auf Float ist eine engere Umstellung. Aus dem Dokument :
Es ist also keine gute Idee. Wenn Sie es immer noch wollen, können Sie es wie folgt tun:
double d = 3.0; float f = (float) d;
quelle
Das Problem ist, dass Ihr Wert im Gleitkommatyp mit einfacher Genauigkeit nicht genau gespeichert werden kann. Beweis:
public class test{ public static void main(String[] args){ Float a = Float.valueOf("23423424666767"); System.out.printf("%f\n", a); //23423424135168,000000 System.out.println(a); //2.34234241E13 } }
Eine andere Sache ist: Sie erhalten nicht "2.3423424666767E13", sondern nur die visuelle Darstellung der im Speicher gespeicherten Nummer. "Wie Sie ausdrucken" und "Was ist im Speicher" sind zwei verschiedene Dinge. Das obige Beispiel zeigt Ihnen, wie Sie die Zahl als Gleitkomma drucken, wodurch die wissenschaftliche Notation vermieden wird, die Sie erhalten haben.
quelle
Erstens bedeutet die Tatsache, dass der Wert in der Datenbank ein Float ist, nicht, dass er auch in ein Java passt
float
. Float ist die Abkürzung für Gleitkomma , und es gibt Gleitkommatypen mit verschiedenen Genauigkeiten. Java-Typenfloat
unddouble
sind beide Gleitkommatypen mit unterschiedlicher Genauigkeit. In einer Datenbank werden beide aufgerufenFLOAT
. Dadouble
eine höhere Präzision als hatfloat
, ist es wahrscheinlich eine bessere Idee nicht Ihren Wert für einen zu werfenfloat
, weil Sie Präzision verlieren.Sie können auch verwenden
BigDecimal
, die eine Zahl mit beliebiger Genauigkeit darstellen.quelle
Verwenden Sie dataType Casting. Zum Beispiel:
// converting from double to float: double someValue; // cast someValue to float! float newValue = (float)someValue;
Prost!
Hinweis:
Ganzzahlen sind ganze Zahlen, z. B. 10, 400 oder -5.
Gleitkommazahlen (Gleitkommazahlen) haben Dezimalstellen und Dezimalstellen, z. B. 12,5 und 56,7786543.
Doubles sind eine bestimmte Art von Gleitkommazahlen, die genauer sind als Standard-Gleitkommazahlen (was bedeutet, dass sie auf eine größere Anzahl von Dezimalstellen genau sind).
quelle
Float.parseFloat (String.valueOf (your_number)
quelle