2016-12-11 3 views
3

Je souhaite obtenir le résultat 0.054563 à partir d'un String et l'analyser en tant que double. Ma tentative actuelle ressemble,Ajout de deux chaînes de nombres décimaux et analyse en double

String number1 = "54,563"; 
String number2 = "54,563"; 

String value = "0.0" + number1; 
String value2 = "0.0" + number2; 

Double rd1 = Double.parseDouble(value.replaceAll(",",".")); 
Double rd3 = Double.parseDouble(value2.replaceAll(",",".")); 
System.out.println(rd1); 

Cependant, quand je le lance, je reçois l'erreur suivante:

Exception in thread "main" java.lang.NumberFormatException: multiple points

+0

Qu'essayez-vous exactement de faire? Voulez-vous juste analyser un nombre et ensuite diviser par '1e6'? Pourquoi effectuez-vous des manipulations numériques en utilisant des chaînes? Ça ne marchera jamais très bien. –

+0

Copie possible de [Qu'est-ce qu'une NumberFormatException et comment puis-je la réparer?] (Http://stackoverflow.com/questions/39849984/what-is-numberformatexception-and-how-can-i-fix-it) – xenteros

Répondre

3

Vous pouvez utiliser une expression régulière pour supprimer tous les non-chiffres. Le modèle \D correspond à des non-chiffres. L'utilisation d'un Pattern est plus rapide si vous devez le faire plusieurs fois. Ainsi, vous pouvez faire quelque chose comme,

String number1 = "54,563"; 
Pattern p = Pattern.compile("\\D"); 
Matcher m = p.matcher(number1); 
String number2 = "0.0" + m.replaceAll(""); 
System.out.println(Double.parseDouble(number2)); 

ou si vous avez seulement besoin de le faire une fois, vous pouvez le faire en ligne comme

String number1 = "54,563"; 
String number2 = "0.0" + number1.replaceAll("\\D", ""); 
System.out.println(Double.parseDouble(number2)); 

deux dont la sortie de votre souhaitée

0.054563

0

Oui, il est possible. Vous devez d'abord changer number1 en une chaîne puis faire + chose.

String value = "0.0" + Integer.toString(number1); 
+0

les deux sont des chaînes le nombre1 est une chaîne déjà im ce qui en fait un double ici Double rd1 = Double.parseDouble (value.replaceAll (",", ".")); –

+0

Oh, je comprends maintenant. –

+1

La chose évidente est, pourquoi ne faites-vous pas 54563 un nombre entier, puis divisez par 1000000? –

4

Vous obtenez l'exception, parce que value serait « 0.054,563 » et une seule période est autorisée dans un double littéral comme 0.1. Votre code value.replaceAll(",",".") change juste la valeur à 0.054.563, ce qui est encore illégal en raison des deux périodes. Retirez la virgule avant comme

String value = "0.0" + number1.replaceAll(",", ""); 

Ensuite, vous pouvez utiliser Double rd1 = Double.parseDouble(value) sans replaceAll(...) supplémentaire.

Je vous recommande fortement de faire la conversion mathématiquement et non par String conversions et l'analyse, car ce sont des opérations inutiles et plutôt coûteux.