Convertir une chaîne en double en Java


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

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(",",".") );

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 ().


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.


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

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

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



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


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


"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;
}


0

Vous pouvez utiliser double.parseDouble ();

String num = "10.1";
Double x = Double.parseDouble(num);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.