2010-11-18 3 views
4

J'ai cherché, j'ai trouvé, mais tout cela n'a pas fonctionné. mon problème est que le NumberFormatException est levé tandis que je veux lancer de String à double. Le tableau de chaînes atomisé contient de nombreuses chaînes et j'ai essayé de faire une sortie avant de les rendre visibles afin que je puisse être sûr qu'il y a des données. le seul problème est la double valeur. C'est quelque chose comme 5837848.3748980 mais la méthode valueOf lève toujours l'exception ici. Je ne sais pas pourquoi.Comment puis-je éviter une exception NumberFormatException en Java?

try 
{ 
int key = Integer.valueOf(atomized[0]); 

double value = Double.valueOf(atomized[1].trim()); 

int role = Integer.valueOf(atomized[2]); 

Double newAccountState = this.bankKonto.charge(key, value, role); 
System.out.println("NEW Account State "+newAccountState); 
this.answerClient(newAccountState.toString()); 
} 
catch (NumberFormatException e) 
{ 
System.out.println(e.getClass().toString()+" "+e.getMessage()); 
} 

sortie Exception:

java.lang.NumberFormatException: For input string: "109037.0" 
     at java.lang.NumberFormatException.forInputString(Unknown Source) 
     at java.lang.Integer.parseInt(Unknown Source) 
     at java.lang.Integer.valueOf(Unknown Source) 
     at vsys.ue02.server.Bank.computeData(Bank.java:122) 
     at vsys.ue02.server.Bank.run(Bank.java:160) 
+0

Quelle est l'exception? – darioo

+0

NumberFormatException – Andre

+0

Darioo demande essentiellement le journal des exceptions. –

Répondre

11

Il fonctionne très bien ici. Donc, je suppose que les paramètres régionaux de votre système ont , plutôt que . pour le séparateur décimal. Pour éviter ces choses que vous pouvez utiliser DecimalFormat:

new DecimalFormat().parse("5837848.3748980"); 

A en juger par le nom de votre variable - compte - Je suppose que vous faites affaire avec de l'argent. Vous ne devez jamais utiliser des types à virgule flottante pour représenter de l'argent. Utilisez BigDecimal ou

+0

Je n'y ai pas pensé mais oui, séparateur décimal allemand. – Andre

3

This est un point de départ pour utiliser DecimalFormat pour convertir des chaînes en nombres. En outre, si vous traitez avec de l'argent et des devises, vous devriez envisager d'utiliser BigDecimal au lieu de double.

2

Vous utilisez Integer.parseInt sur un certain nombre avec un point décimal - ce n'est pas un entier valide - visible dans votre trace de la pile

+0

le problème était quelque chose comme ça. J'ai ici inter communication de processus et le tableau atomisé contient des données incomming sous la forme d'un protocole. il n'a pas été correctement analysé. mais maintenant ça marche et avec bigdecimal ça marche beaucoup mieux! – Andre

Questions connexes