2011-06-21 7 views
1

Possible en double:
Existing String to DoubleParsing Chaîne à doubler

J'essaie d'analyser la chaîne en double, et je ne suis pas sûr que ce soit la bonne façon de le faire . Si quelqu'un peut m'aider à vérifier et donner son avis, je l'apprécierais vraiment.

Voici le code:

String amount = enterAmount.getText().toString(); 
    double subtotal = Double.valueOf(amount).doubleValue(); 

Merci d'avance pour vos aimables commentaires.

+0

Bienvenue sur StackOverflow. Lorsqu'une réponse vous a aidé à résoudre votre problème, vous devez l'accepter en cliquant sur la coche à côté de la réponse. –

Répondre

3
String amount = enterAmount.getText(); 
double subtotal = Double.parseDouble(amount); 
7

Vous pouvez essayer

double subtotal = Double.parseDouble(amount); 
3

Vous devriez envelopper cet appel autour d'un bloc try-catch et la poignée NumberFormatException qui sera levée si la chaîne ne peut pas être analysée comme Double.

1

Vous pouvez également essayer ceci.

double subtotal = Double.parseDouble(amount); 
1

Ce que je fais, est (lorsque vous utilisez un JFormattedTextField ou JTextField) remplaçant toutes les années par des virgules par des points et la suppression des espaces:

String amount = enterAmount.getText(); 
amount = amount.replace(",",".").replace(" ", ""); 
double subtotal = Double.parseDouble(amount); 

Cela signifie l'entrée suivante fonctionne:

12 
1,2 
1.2 
200 000 
200 000,01 

Les virgules sont utilisées dans beaucoup de pays européens: Wikipedia

Bleu = point;
Vert = virgule;
Rouge = Momayyez (/)

1

Vous devez utiliser une certaine logique pour déterminer si elle est un numéro valide. Voici une fonction pour les entiers de test:

 
public static int validateInteger(String number) 
{ 
    int i = -1; 

    try { 
    i = Integer.parseInt(number); 
    } 
    catch (NumberFormatException nfe) 
    {} 
    catch (NullPointerException npe) 
    {} 

    return i; 
} 

Dans votre cas, vous devez changer la fonction Integer.parseInt() dans tout type que vous voulez.

+2

Que faire si '-1' est entré et est valide? –

+0

La fonction n'est pas statique dans le sens où vous ne pouvez pas la modifier. Si vous voulez autoriser le numéro -1, c'est bien sûr parfait. Choisissez une autre valeur de retour, n'importe quel nombre, avec une très faible probabilité d'être un nombre correctement entré. J'ai utilisé cette fonction pour tester si un numéro de port était valide et comme les numéros négatifs ne peuvent pas être utilisés comme numéros de ports, le nombre -1 était une bonne indication de cela. –

+0

vous avez raison que toute valeur non valide pourrait être utilisée.Vous pouvez retourner un long, ou vous pouvez simplement lancer l'exception NumberFormatException pour que l'appelant l'attrape plutôt que de vérifier la valeur. –

0

Si vous voulez être international, vous devriez probablement utiliser:

DecimalFormat.getNumberInstance(Locale).parse(numberAsString).doubleValue()