Konvertieren Sie String in Java in Double

286

Wie kann ich eine Stringsolche "12.34"in eine doublein Java konvertieren ?

Kleiner Bauch
quelle
1
Diese drei Antworten, die im Grunde genommen nur die Antwort mit den höchsten Stimmen duplizieren, die einige Jahre zuvor veröffentlicht wurden, haben sicher viele positive Stimmen.
Bernhard Barker

Antworten:

471

Sie können verwenden Double.parseDouble(), um a Stringin a zu konvertieren double:

String text = "12.34"; // example String
double value = Double.parseDouble(text);

Für Ihren Fall sieht es so aus, als ob Sie wollen:

double total = Double.parseDouble(jlbTotal.getText());
double price = Double.parseDouble(jlbPrice.getText());
WhiteFang34
quelle
meine Codierung sollte also double total = Double.parseDouble (string) sein;?
TinyBelly
4
@TinyBelly: Ja, es sieht so aus, als ob Sie wollen:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34
1
@TinyBelly: Sie müssen den Teil des Textes aus der Zeichenfolge extrahieren, die Sie für das Double analysieren möchten. Hier ist eine Möglichkeit, wie Sie dies für Ihren Fall tun können, obwohl ich nicht garantieren kann, dass es für alles funktioniert: double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));- Dies ersetzt im Grunde alle Zeichen, die keine Zahl oder .nichts sind, und lässt nur die Zahl und den Dezimalpunkt zu analysieren.
WhiteFang34
4
Die Verwendung von double für Preisberechnungen ist nicht ratsam.
Bozho
2
Für diejenigen , gelockt hier während für Ergebnis der Klasse der Suche Doublestatt Urtyp doubleVerwendung Double.valueOf(String).
Pshemo
48

Wenn Sie Probleme beim Parsen von Zeichenfolgen auf Dezimalwerte haben, müssen Sie "," in der Zahl durch "ersetzen.


String number = "123,321";
double value = Double.parseDouble( number.replace(",",".") );
TmRocha
quelle
2
Eine weitere Option: DecimalFormat df = new DecimalFormat (); DecimalFormatSymbols sfs = new DecimalFormatSymbols (); sfs.setDecimalSeparator (','); df.setDecimalFormatSymbols (sfs); df.parse (Nummer);
Robertiano
37

Versuchen Sie Folgendes, um eine Zeichenfolge wieder in ein Double umzuwandeln

String s = "10.1";
Double d = Double.parseDouble(s);

Die parseDouble-Methode erzielt den gewünschten Effekt, ebenso wie die Double.valueOf () -Methode.

Alex Oczkowski
quelle
2
Nein, String.valueOf (etwas) gibt eine String-Darstellung von etwas zurück: Wenn etwas ein integrierter Typ ist oder wenn es ein Objekt ist und null ist, entspricht es ansonsten someObject.toString (). Um ein Double aus einem String zu erhalten, muss man es umgekehrt machen, wie in den anderen Antworten gezeigt (Double.valueOf (someString) gibt ein Double zurück und Double.parseDouble (someString) gibt ein Double zurück).
Johann Petrak
36
double d = Double.parseDouble(aString);

Dies sollte den String aString in das Double d konvertieren.

Andreas Vinter-Hviid
quelle
aString bezieht sich auf was? Kannst du mir helfen, mehr zu erklären?
TinyBelly
2
aString ist nur eine Zeichenfolge. Genauer gesagt die Zeichenfolge, die Sie in eine Zahl konvertieren möchten.
Andreas Vinter-Hviid
30

Verwenden Sie new BigDecimal(string). Dies garantiert später eine ordnungsgemäße Berechnung.

Als Faustregel - immer BigDecimalfür sensible Berechnungen wie Geld verwenden.

Beispiel:

String doubleAsString = "23.23";
BigDecimal price = new BigDecimal(doubleAsString);
BigDecimal total = price.plus(anotherPrice);
Bozho
quelle
20

Sie müssen nur String-Werte mit Double analysieren

String someValue= "52.23";
Double doubleVal = Double.parseDouble(someValue);
System.out.println(doubleVal);
Harshal Patil
quelle
14

Ich zitiere noch einmal das Zitat von Robertiano oben - denn dies ist bei weitem die vielseitigste und lokalisierungsadaptivste Version. Es verdient einen vollen Beitrag!

Andere Option:

DecimalFormat df = new DecimalFormat(); 
DecimalFormatSymbols sfs = new DecimalFormatSymbols();
sfs.setDecimalSeparator(','); 
df.setDecimalFormatSymbols(sfs);
double d = df.parse(number).doubleValue();
JBWanscher
quelle
8
String double_string = "100.215";
Double double = Double.parseDouble(double_string);
Habibur Rahman Ovie
quelle
3

Das würde ich tun

    public static double convertToDouble(String temp){
       String a = temp;
       //replace all commas if present with no comma
       String s = a.replaceAll(",","").trim(); 
      // if there are any empty spaces also take it out.          
      String f = s.replaceAll(" ", ""); 
      //now convert the string to double
      double result = Double.parseDouble(f); 
    return result; // return the result
}

Wenn Sie beispielsweise den String "4 55,63. 0" eingeben, wird die doppelte Nummer 45563.0 ausgegeben

Faisalsash
quelle
2

Die Verwendung Double.parseDouble()ohne umgebenden try/catchBlock kann möglicherweise NumberFormatExceptiondazu führen, dass die Eingabe-Doppelzeichenfolge nicht einem gültigen Format entspricht.

Guava bietet hierfür eine Dienstprogrammmethode an, die zurückgegeben wird, nullfalls Ihr String nicht analysiert werden kann.

https://google.github.io/guava/releases/19.0/api/docs/com/google/common/primitives/Doubles.html#tryParse(java.lang.String)

Double valueDouble = Doubles.tryParse(aPotentiallyCorruptedDoubleString);

Zur Laufzeit wird eine fehlerhafte String-Eingabe nullzugewiesenvalueDouble

DYS
quelle
"Gibt 0.0 zurück, falls Ihr String nicht analysiert werden kann" - Der Javadoc unterstützt diese Behauptung nicht.
Tom
@ Tom Es gibt den Nullwert Double Type zurück, der in 0.0 Double Type konvertiert werden kann - DYS vor 13 Sekunden edit
DYS
1
Es kann, aber nicht automatisch, und Ihr Snippet tut dies nicht.
Tom
1

Verwenden Sie diese Option, um eine beliebige String-Nummer in double zu konvertieren, wenn Sie int benötigen. Konvertieren Sie einfach den Datentyp von num und num2 in int. nahm alle Fälle für jede Saite doppelt mit Eng: "Bader Qandeel"

public static double str2doubel(String str) {
    double num = 0;
    double num2 = 0;
    int idForDot = str.indexOf('.');
    boolean isNeg = false;
    String st;
    int start = 0;
    int end = str.length();

    if (idForDot != -1) {
        st = str.substring(0, idForDot);
        for (int i = str.length() - 1; i >= idForDot + 1; i--) {
            num2 = (num2 + str.charAt(i) - '0') / 10;
        }
    } else {
        st = str;
    }

    if (st.charAt(0) == '-') {
        isNeg = true;
        start++;
    } else if (st.charAt(0) == '+') {
        start++;
    }

    for (int i = start; i < st.length(); i++) {
        if (st.charAt(i) == ',') {
            continue;
        }
        num *= 10;
        num += st.charAt(i) - '0';
    }

    num = num + num2;
    if (isNeg) {
        num = -1 * num;
    }
    return num;
}
Ahmed M. Bader El-Din
quelle
1
String s = "12.34";
double num = Double.valueOf(s);
Ranjith Alappadan
quelle
0

Sie können double.parseDouble () verwenden;

String num = "10.1";
Double x = Double.parseDouble(num);
HussainOmer
quelle