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

avec Java Discussion :

Format numérique


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut Format numérique
    Bonjour,


    je dois récupérer dans un fichier des valeurs de sommets X Y Z sous la forme :

    1 0.00000000000E+00 0.00000000000E+00 0.00000000000E+00
    2 0.00000000000E+00 0.20000000000E+01 0.00000000000E+00
    3 0.00000000000E+00 0.40000000000E+01 0.00000000000E+00
    4 0.00000000000E+00 0.60000000000E+01 0.00000000000E+00
    5 0.00000000000E+00 0.80000000000E+01 0.00000000000E+00


    je récupere donc chaque string 0.00000000000E+00 etc ... et je le parse grace à la méthode Float.ParseFloat.

    Cela ne marche pas il me met des valeurs inexactes. Me suis-je trompé de type?

    Merci


    Laurent

  2. #2
    Membre expérimenté Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Par défaut
    t'as essayé avec des doubles ?

  3. #3
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Pour manipuler des valeursavec autant de chiffres après la virgule, j'éviterai d'utiliser des float, voire même des doubles.

    J'irai plutôt manipuler ça avec des BigDecimals.

    A moins de vraiment comprendre ce qui se passe pendant les opérations sur les doubles, leurs résultats semblent parfois mystérieux.

    Ceci dit, si tu ne fais aucune opération dessus, des doubles devraient aller.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut
    Bon j y arrive mais des qu il tombe sur des négatifs ca plante :


    526 -0.10000003576E+01 0.17320505381E+01 0.66666670144E-01
    527 -0.20000000000E+01-0.47699522554E-07 0.66666670144E-01
    528 -0.20000000000E+01-0.17484555315E-06 0.10000000894E+00

    En fait ca plante car j'utilise les StringTokenizer pour récuperer mes données. Et dans ce cas vu que ceux qui ont fait ce fichier ont pas pensé a mettre un espace de plus donc je récupere le token -0.20000000000E+01-0.47699522554E-07 et donc mon ParseFloat plante. Kelkun aurait il une méthode simple pour récuperer mes 2 chiffres sans que je me lance dans un parsage tout pourri comme je sais si bien le faire??

    Merci

    Laurent

  5. #5
    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,


    Tu peux utiliser les expressions régulières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            String line = "-0.20000000000E+01-0.17484555315E-06 0.10000000894E+00";
     
            Pattern pattern = Pattern.compile("-?[0-9]+\\.[0-9]+E[+-][0-9]{2}");
     
            Matcher matcher = pattern.matcher(line);
            while (matcher.find()) {
                String number = matcher.group();
                // Traitement
            }
    Pour en savoir plus suivre les cours et tutoriels pour apprendre Java : http://java.developpez.com/cours/

    a++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut
    Merci Adiguba Ca marche du feu de dieu!!!
    Par contre si c pas trop te demander tu peux me modifier ton expression reguliere pour qu elle accepte aussi un entier tout seul ??

    [0-9] ca veut dire un chiffre entre 0 et 9 ou une suite infini de chiffre entre 0 et 9???

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut
    c bon merci j ai mis Pattern pattern = Pattern.compile("-?[0-9]+(\\.[0-9]+E[+-][0-9]{2})?"); et ca a l air de marcher.

    Encore merci!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut
    Par contre je voudrais ne pas utiliser de boucle pour pouvoir faire ca:

    matcher.find();
    String d = matcher.group();
    System.out.println("Ifff : "+d);
    som.setId(Integer.parseInt(d));

    System.out.println("Id : "+matcher.group());
    // Recupère X
    matcher.find();
    som.setX(Double.parseDouble(matcher.group()));
    System.out.println("X : "+matcher.group());
    // Recupère Y
    matcher.find();
    som.setY(Double.parseDouble(matcher.group()));
    System.out.println("Y : "+matcher.group());
    // Recupère Z
    matcher.find();
    som.setZ(Double.parseDouble(matcher.group()));
    System.out.println("Z : "+matcher.group());


    Mais ca marche po...

  9. #9
    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
    Tu peux même le découper en deux groupes pour authoriser les nombres à virgules sans E :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern pattern = Pattern.compile("-?[0-9]+(\\.[0-9]+)?(E[+-][0-9]{2})?");
    a++

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut
    Ok mais j arrive pas a l'utiliser sans la boucle while le matcher.group() plante si il est pas dans le while.

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

Discussions similaires

  1. [CR XI] format numérique sur les axes d'un graphique
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 23/03/2007, 15h20
  2. Conversion format numérique/caractère
    Par Laverdure_mt dans le forum Access
    Réponses: 1
    Dernier message: 16/08/2006, 14h49
  3. Réponses: 4
    Dernier message: 09/06/2006, 09h33
  4. Format numérique
    Par _developpeur_ dans le forum Access
    Réponses: 7
    Dernier message: 04/01/2006, 11h19
  5. Réponses: 2
    Dernier message: 21/06/2005, 16h37

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