IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Locale et conversion String vers Double sur DecimalFormat


Sujet :

Langage Java

  1. #1
    Membre averti Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Points : 345
    Points
    345
    Par défaut Locale et conversion String vers Double sur DecimalFormat
    Salut à tous...
    Je galère (et c'est un petit mot) sur une IHM.
    En fait j'ai une fenetre avec des valeurs récupérées dans une BDD que j'affiche dans des jTextFields.
    Pour l'affichage, j'utilise un DecimalFormat comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static final String roundDouble(double d) {
            DecimalFormatSymbols dfs = new        DecimalFormatSymbols(Locale.FRANCE);
            dfs.setGroupingSeparator(' ');
            DecimalFormat df = new DecimalFormat("#,##0.00", dfs);
            return df.format(d).replace(',','.') ;
        }
    L'ensemble de ces données sont modifiables manuellement et par conséquent j'ai une fonction de rafraichissement des variables qui doit récupérer les valeurs (String) des JTextFields pour ensuite les convertir en double. J'utilise alors 2 fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public static final Double getDouble(String s)
        {
            s = s.replace('.',',') ;
            NumberFormat nombre = NumberFormat.getCurrencyInstance(Locale.FRANCE);
            try
            {
                return (parseFull(nombre,s)).doubleValue() ;
            }
            catch(Exception e)
            {
                System.out.println(e.toString());
            }
            return 0. ;
        }
     
        public static Number parseFull(NumberFormat nf, String source) throws ParseException
        {
            ParsePosition parsePosition = new ParsePosition(0);
            Number number = nf.parse(source, parsePosition);
            // On vérifie qu'il n'y ai pas d'erreur :
            if (parsePosition.getErrorIndex() >= 0) {
                throw new ParseException("Unparseable number: \"" + source + "\"",
                                         parsePosition.getErrorIndex());
            }
            // On vérifie que toute la chaine a bien été parsé :
            if (parsePosition.getIndex() != source.length()) {
                throw new ParseException("Unparseable number: \"" + source + "\"",
                        parsePosition.getIndex());
            }
            return number;
        }
    et Voici l'appel de la fonction getDouble()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.capital = getDouble(jTextField1.getText().replace(' ', '\u00a0'));
    Mon problème est que ca me lève sans cesse un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.text.ParseException: Unparseable number: "0,00"
    Comment faire alors pcq je sèche d'un point de vue idée...
    Merci pour votre aide !

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    getCurrencyInstance() attend un format de monnaie avec le signe "€"...

    Il serait préférable d'utiliser getNumberInstance() ou même tout simplement d'utiliser le même objet NumberFormat pour le formattage et le parsing...

    a++

  3. #3
    Membre averti Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Points : 345
    Points
    345
    Par défaut
    Je me réponds à moi même !

    Il faut récupérer le String par un getText() puis faire un traitement pour remplacer les vides par "" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public static final Double getDouble(String s)
        {
            s = s.replaceAll("\\s", "");
            return Double.parseDouble(s) ;
        }
    Merci quand même !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. conversion string vers une date
    Par fatati dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/12/2006, 10h09
  2. Conversion String vers Byte
    Par zulianithomas dans le forum Delphi
    Réponses: 8
    Dernier message: 07/10/2006, 10h09
  3. conversion string vers int
    Par mathher dans le forum C++
    Réponses: 4
    Dernier message: 14/04/2006, 17h52
  4. Problème conversion float vers double
    Par jhenaff dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/01/2006, 10h39
  5. conversion string en double
    Par zmatz dans le forum SL & STL
    Réponses: 2
    Dernier message: 14/10/2005, 22h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo