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.
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(",","."));
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.
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 =newDecimalFormat();DecimalFormatSymbols sfs =newDecimalFormatSymbols();
sfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(sfs);double d = df.parse(number).doubleValue();
publicstaticdouble convertToDouble(String temp){String a = temp;//replace all commas if present with no commaString s = a.replaceAll(",","").trim();// if there are any empty spaces also take it out. String f = s.replaceAll(" ","");//now convert the string to doubledouble 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
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.
"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"
publicstaticdouble 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++;}elseif(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;}
Réponses:
Vous pouvez utiliser
Double.parseDouble()
pour convertir unString
en undouble
:Pour votre cas, il semble que vous souhaitiez:
la source
double total = Double.parseDouble(jlbTotal.getText());
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.Double
au lieu de l'double
utilisation du type primitifDouble.valueOf(String)
.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 "."
la source
Pour reconvertir une chaîne en double, essayez ce qui suit
La méthode parseDouble produira l'effet souhaité, tout comme la méthode Double.valueOf ().
la source
Cela devrait convertir la chaîne aString en double d.
la source
Utilisez
new BigDecimal(string)
. Cela garantira un calcul correct plus tard.En règle générale - utilisez toujours
BigDecimal
pour les calculs sensibles comme l'argent.Exemple:
la source
Vous devez uniquement analyser les valeurs de chaîne à l'aide de Double
la source
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:
la source
la source
Il y a aussi une autre façon.
Double est une classe et "temp" est une variable. "numéro" est le dernier numéro que vous recherchez.
la source
Voilà ce que je ferais
Par exemple, vous entrez la chaîne "4 55,63. 0", la sortie sera le double numéro 45563.0
la source
L'utilisation
Double.parseDouble()
sanstry/catch
bloc environnant peut entraîner un potentielNumberFormatException
si la double chaîne d'entrée n'était pas conforme à un format valide.Guava propose une méthode utilitaire pour cela qui revient
null
au 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
null
affecté àvalueDouble
la source
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"
la source
la source
Vous pouvez utiliser double.parseDouble ();
la source