2011-01-20 7 views
1

J'ai un TextField où je peux saisir des valeurs; Et j'ai besoin de convertir la valeur tapée en Int et l'afficher avec S.O.Println.Convertir la valeur de TextField en Int

EDIT: 

J'ai essayé maintenant:

try { 
int i = Integer.parseInt(myText.getText()); 
System.out.println("This is an integer " + i);    
} 
catch (NumberFormatException x) { 
System.out.println("Error : "+ x.getMessage()); 
} 

Mais il me donne:

This is an integer 122    // When I type 122 
Error : For input string: "122,5"  // When I type 122,5 
Error : For input string: "122.5"  // When I type 122.5 

Toutes les idées.

EDIT:

voici:

double d = Double.parseDouble(myText.getText()); 
int i = (int)d; 

Répondre

3

Il semble que vous utilisez une virgule comme séparateur, plutôt que d'un point. Et de toute façon, vous ne seriez pas en mesure de l'analyser comme int. Vous avez besoin Double.parseDouble(..)

L'utilisation peut utiliser NumberFormat correspondant aux paramètres régionaux actuels afin d'analyser l'entrée.

Si vous utilisez SWT (Eclipse étiquetée) - Je pense que vous pouvez limiter les caractères possibles en ajoutant un VerifyListener au champ de texte. Dans votre écouteur, appelez doit() sur l'événement passé si l'entrée est autorisée.

Si vous utilisez AWT (TextField étant le composant texte AWT) - puis voir something like this

+0

voir les mises à jour maintenant. – VisaMasterCard

+0

@VisaMasterCard bien sûr, ce n'est pas un int. c'est un double. – Bozho

-1

C'est parce que le myText.getText() est 11,5 (non numérique) et non 11.5 (double).

Essayez de faire,

Double.parseDouble(myText.getText().replaceAll(",", ".")); 

Cela remplace ,-..

Vous pouvez également utiliser NumberFormat pour effectuer la conversion de votre numéro.


aussi, je l'ai remarqué que vous utilisez Integer.parseInt() lors de l'analyse double numéros. C'est pourquoi vous avez des exceptions levées.

Vous devez utiliser NumberFormat.getInstance(locale).parse(myText.getText()) pour obtenir le résultat souhaité. Ne pas oublier que parse() retourne un objet Number, afin d'obtenir un double, faites ceci:

double d = NumberFormat.getInstance(locale).parse(myText.getText()).doubleValue(); 
+0

Ceci est probablement dû à une différence de paramètres régionaux. Votre solution serait dangereuse dans une application qui doit gérer la localisation, car il n'est pas inhabituel qu'une virgule représente un séparateur de milliers dans certains pays. Cela devrait être géré en utilisant NumberFormat. – rfeak

+0

J'ai tout essayé, voir mes mises à jour. Mais ne fonctionne pas. – VisaMasterCard

+0

@rfreak, je suis d'accord .... J'ai mis à jour mon post pour gérer la localisation. –

0

Vous essayez d'analyser la chaîne « 11,5 » comme nombre entier. Ce n'est certainement pas un nombre entier. Par conséquent, l'exception est levée.

Vous pouvez essayer d'utiliser Double.parseDouble() et le résultat dépend de votre environnement local. Si vous êtes en anglais, il attend point (.) Et pas coma, donc le nombre devrait ressembler à 11.5

+0

voir les mises à jour maintenant. – VisaMasterCard

0

La virgule vous donne une erreur d'analyse. Si vous avez besoin de la virgule, vous pouvez l'utiliser comme délimiteur et analyser les deux côtés séparément.

Voici un exemple de séparation de deux valeurs séparées par des virgules dans une chaîne.

String str = "1,2,3,4"; 
StringTokenizer st = new StringTokenizer(str, ","); 
while (st.hasMoreTokens()) { 
    System.out.println(st.nextToken()); 
} 

La sortie serait:

1 
2 
3 
4 
0

11,5 est pas un nombre que Java peut analyser sans autre interaction. Vous pouvez remplacer la virgule par un point décimal, ainsi que la suppression des espaces (en fonction de vos paramètres régionaux):

Double.parseDouble(myText.getText().replaceAll(",", ".").replaceAll(" ", "")); 

Notes:

Vous ne pouvez pas utiliser la virgule comme séparateur de milliers.