2017-01-16 1 views
-1

Je tente de coder une calculatrice Java. Am en cours d'exécution dans quelques exceptions près NumberFormat lorsque vous essayez de calculer les éléments suivants:NumberFormatException lors de la multiplication de deux entiers

99.9(4x/8+k) 

Le plus drôle est que son me donner l'erreur après que je distribuerai 99,9 seulement si le produit de 99,9 et « k » est supérieur ou égal à 1000. Donc, pour les valeurs supérieures à 10. Dans mon code j'essaie de charger une variable chaîne avec les sommes de toutes les constantes d'une équation, c'est alors que l'erreur se produit. Voici ce que le code ressemble à:

double constantSum = 0; 
//create a stringtokenizer object and convert each token to a double as 
//follows, then, add the double to constantSum 
constantSum = constantSum + Double.valueOf(token);//the token comes 
//from the stringtokenizer object 

L'entrée qui Double.valueOf (jeton) reçoit est 1098,900 qui est le produit de 99,9 et 11, notez que l'entrée a été arrondi à la place par millièmes un objet NumberFormat que j'ai initialisé dans le code.

des idées sur la façon de se débarrasser de cette exception NumberFormat

Voici les détails de la façon dont l'exception ressemble à: Exception dans le thread « principal » java.lang.NumberFormatException: Pour chaîne d'entrée: « 1,098.900 " à sun.misc.FloatingDecimal.readJavaFormatString (FloatingDecimal.java:2043) à sun.misc.FloatingDecimal.parseDouble (FloatingDecimal.java:110)

grâce

+0

Vous avez tort, l'entrée n'est pas '1098.900', c'est' 1.098.900'. Voir le message d'erreur. Pourquoi auriez-vous même cette valeur intermédiaire comme une chaîne dans votre code? – Andreas

+0

Copie possible de [Qu'est-ce qu'une exception 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

2

L'ex Ception est probablement provoquée par la virgule qui se trouve dans la chaîne token. Pour une solution rapide, vous pouvez essayer dépouillant toutes les virgules:

constantSum += Double.valueOf(token.replaceAll(",", "")); 
               ^^^^ this removes all commas 
0

Vous ne pouvez pas avoir la virgule dans la chaîne que vous souhaitez transformer en un double. Retirez la virgule et cela devrait fonctionner.