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

Java Discussion :

parser un nombre -0.1235E-12


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Par défaut parser un nombre -0.1235E-12
    Bonjour,
    j'essaie de parser une ce nombre -0.1235E-12 avec la classe DecimalFormat et le pattern "#0.0###E0#". Ca me retourne bien un double, mais qui vaut -0.0

    une idée ?

    Merci.

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Deux conseils :
    1. Force la locale : par défaut c'est celle de l'OS qui sera utilisé (Français ?) et donc c'est la virgule qui est utilisé comme séparateur des décimales :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      NumberFormat nf = new DecimalFormat("#0.0###E0#", DecimalFormatSymbols.getInstance(Locale.US));
    2. N'utilise pas parse(String) mais parse(String,ParsePosition) :
      • parse(String) ne traitera pas forcément la totalité de la chaine, et ne renvoi une exception que dans le cas où il ne trouve aucun chiffre valide. Dans ton cas il trouve -0 puis s'arrête car il considère le point comme un caractère invalide...
      • parse(String,ParsePosition) ne renvoi aucune exception mais renseigne l'objet ParsePosition sur la position à laquelle il s'est arrêté, et il est ainsi possible de vérifier si la chaine a été traiter dans sa totalité ou non. Par exemple voici une méthode qui remonte une exception si la chaine n'est pas complètement traitée :
        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
        	public static Number parseFull(NumberFormat nf, String source) throws ParseException {
        		// On traitera la chaine en entrée à partir de son début (index == 0)
        		ParsePosition pp = new ParsePosition(0);
        		// On parse la chaine en entrée :
        		Number number = nf.parse(source, pp);
         
        		// Si la méthode parse a détecté une erreur (aucun caractère valide) 
        		if (pp.getErrorIndex()>=0) {
        			// On remonte une exception
        			throw new ParseException("Unparseable number: \"" + source + "\"", pp.getErrorIndex());
        		}
        		// Si on n'a pas traité toute la chaine de caractère :
        		if (pp.getIndex()!=source.length()) {
        			// On remonte une exception
        			throw new ParseException("Unparseable number: \"" + source + "\"", pp.getIndex());
        		}
        		// Sinon on peut retourner le nombre :
        		return number;
        	}



    A noter que dans ton cas tu pourrais très bien utiliser le formatter par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
    a++

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Par défaut
    merci

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Par défaut
    Je rajoute une question à ce thread.
    Je me suis rendu compte que mon pattern ne parsait un nombre qu'avec un exposant négative.
    Par exemple, si j'ai un le nombre "1.0570410E+02", le parse ne prends pas en compte l'exposant.
    Y a t'il une solution à ce problème ?

    Merci.

Discussions similaires

  1. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08
  2. nombre aleatoire
    Par Bob dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2002, 18h12
  3. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31
  4. Nombre de fichiers ouverts simultanément
    Par matrixfan dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/05/2002, 17h47
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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