Convertir une chaîne en double en Java

286

Comment puis - je convertir un Stringtel que "12.34"un doubleen Java?

TinyBelly
la source
1
Ces trois réponses reproduisent simplement la réponse la plus votée publiée quelques années plus tôt, mais elles ont certainement beaucoup de votes positifs.
Bernhard Barker

Réponses:

471

Vous pouvez utiliser Double.parseDouble()pour convertir un Stringen un double:

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

Pour votre cas, il semble que vous souhaitiez:

double total = Double.parseDouble(jlbTotal.getText());
double price = Double.parseDouble(jlbPrice.getText());
WhiteFang34
la source
donc mon codage doit être double total = Double.parseDouble (string) ;?
TinyBelly
4
@TinyBelly: oui, on dirait que vous voulez:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34
1
@TinyBelly: vous devez extraire la partie du texte de la chaîne que vous souhaitez analyser pour le double. Voici une façon de le faire pour votre cas, bien que je ne puisse pas garantir que cela fonctionnera pour tout: double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));- cela remplace essentiellement tous les caractères qui ne sont pas un nombre ou .rien, ne laissant que le nombre et le point décimal à analyser.
WhiteFang34
4
il n'est pas conseillé d'utiliser le double pour les calculs de prix.
Bozho
2
Pour ceux attirés ici lors de la recherche du résultat de la classe Doubleau lieu de l' doubleutilisation du type primitif Double.valueOf(String).
Pshemo
48

Si vous rencontrez des problèmes lors de l'analyse de la chaîne en valeurs décimales, vous devez remplacer "," dans le nombre par "."


String number = "123,321";
double value = Double.parseDouble( number.replace(",",".") );
TmRocha
la source
2
Une autre option: DecimalFormat df = new DecimalFormat (); DecimalFormatSymbols sfs = new DecimalFormatSymbols (); sfs.setDecimalSeparator (','); df.setDecimalFormatSymbols (sfs); df.parse (nombre);
Robertiano
37

Pour reconvertir une chaîne en double, essayez ce qui suit

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

La méthode parseDouble produira l'effet souhaité, tout comme la méthode Double.valueOf ().

Alex Oczkowski
la source
2
Non, String.valueOf (quelque chose) renvoie une représentation String de quelque chose: si quelque chose est un type intégré ou s'il s'agit d'un Object et qu'il est nul, sinon il est équivalent à someObject.toString (). Pour obtenir un Double à partir d'une Chaîne, il faut le faire dans l'autre sens comme indiqué dans les autres réponses (Double.valueOf (someString) renvoie un Double et Double.parseDouble (someString) renvoie un double).
Johann Petrak
36
double d = Double.parseDouble(aString);

Cela devrait convertir la chaîne aString en double d.

Andreas Vinter-Hviid
la source
aString fait référence à quoi? pouvez-vous m'aider à expliquer plus?
TinyBelly
2
aString n'est qu'une chaîne. Plus précisément, la chaîne que vous souhaitez convertir en nombre.
Andreas Vinter-Hviid
30

Utilisez new BigDecimal(string). Cela garantira un calcul correct plus tard.

En règle générale - utilisez toujours BigDecimalpour les calculs sensibles comme l'argent.

Exemple:

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

Vous devez uniquement analyser les valeurs de chaîne à l'aide de Double

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

Citant à nouveau la citation de Robertiano ci-dessus - car il s'agit de loin de la version adaptative la plus polyvalente et la plus adaptée à la localisation. Il mérite un article complet!

Une autre option:

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

Voilà ce que je ferais

    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
}

Par exemple, vous entrez la chaîne "4 55,63. 0", la sortie sera le double numéro 45563.0

faisalsash
la source
2

L'utilisation Double.parseDouble()sans try/catchbloc environnant peut entraîner un potentiel NumberFormatExceptionsi la double chaîne d'entrée n'était pas conforme à un format valide.

Guava propose une méthode utilitaire pour cela qui revient nullau cas où votre chaîne ne pourrait pas être analysée.

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);

Dans l' exécution, une entrée de chaîne rendements malformés nullaffecté àvalueDouble

DYS
la source
"renvoie 0,0 au cas où votre chaîne ne peut pas être analysée" - Le Javadoc ne prend pas en charge cette revendication.
Tom
@Tom Il renvoie une valeur nulle Type double qui peut être converti en 0,0 type double - DYS Il y a 13 secondes modifier
DYS
1
Cela peut, mais pas automatiquement, et votre extrait de code ne le fait pas.
Tom
1

Utilisé pour convertir n'importe quel nombre de chaînes en double lorsque vous avez besoin d'int convertir simplement le type de données de num et num2 en int; a pris tous les cas pour tout double de chaîne avec 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
la source
1
String s = "12.34";
double num = Double.valueOf(s);
Ranjith Alappadan
la source
0

Vous pouvez utiliser double.parseDouble ();

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