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

Collection et Stream Java Discussion :

formatage de nombre


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut formatage de nombre
    Bonjour à tous,

    mon problème est le suivant : dans une application, je parse un fichier texte et je récupère des données. A certains moments, je récupère des données numériques sous forme de chaînes de caractères que je place dans des variables de type Long ou de type Double (selon des règles prédéfinies)

    L'inconvénient est que je dois être capable de renvoyer cette même chaîne de caractères avec les 0 non significatifs. Pour les Long, je n'ai pas de problèmes (j'utilise DecimalFormat) mais pour les Double, l'affaire se corse.

    En effet, la seule chose que je connaisse sur la chaîne que je lis c'est sa taille. En revanche, l'emplacement de la virgule (quand il y en a une!!) est aléatoire.
    Par exemple, pour une chaîne de 9 caractères je peux aussi bien avoir
    • 0001.5421 --> en Double : 1.5421
      02.125670 --> en Double : 2.12567
      123456789 --> en Double : 123456789
      00201.100 --> en Double : 201.1

    Petite précision pour finir, ce que je dois renvoyer dois avoir le même nombre de caractères que ce que j'avais lu, mais les 0 à rajouter ne sont pas forcément aux mêmes endroits. Par exemple pour une chaîne de 9 caractères, 1.5421 peut donner:
    • 0001.5421
      001.54210
      01.542100
      1.5421000


    Etant donné qu'il peut arriver que j'ai des opérations à faire dessus, j'aimerais éviter de tout enregistrer dans des String,... Si vous avez une idée?

    Merci

  2. #2
    Membre régulier Avatar de Actarus78
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 87
    Points : 118
    Points
    118
    Par défaut
    Utilise un DecimalFormat.

    http://java.sun.com/docs/books/tutorial/i18n/format/decimalFormat.html

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    J'ai essayé justement, mais çà ne va pas...
    Si je décide de formater mon Double avec "00000.000", çà marche pour certains cas mais si mon Double vaut 127588.8 et bien il n'est pas content et il me sort une jolie exception car il essaie d'écrire 127588.800 dans un champ qui ne peut contenir que 9 caractères....

    Merci quand même

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

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Points : 278
    Points
    278
    Par défaut Re: formatage de nombre
    Citation Envoyé par Phiz
    Petite précision pour finir, ce que je dois renvoyer dois avoir le même nombre de caractères que ce que j'avais lu, mais les 0 à rajouter ne sont pas forcément aux mêmes endroits. Par exemple pour une chaîne de 9 caractères, 1.5421 peut donner:
    • 0001.5421
      001.54210
      01.542100
      1.5421000
    et tu en renvoyer un en particulier ou n'importe lequel ?

    j'ai du mal a saisir ce que tu veux faire....

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Re: formatage de nombre
    Citation Envoyé par @ldehan
    Citation Envoyé par Phiz
    Petite précision pour finir, ce que je dois renvoyer dois avoir le même nombre de caractères que ce que j'avais lu, mais les 0 à rajouter ne sont pas forcément aux mêmes endroits. Par exemple pour une chaîne de 9 caractères, 1.5421 peut donner:
    • 0001.5421
      001.54210
      01.542100
      1.5421000
    et tu en renvoyer un en particulier ou n'importe lequel ?

    j'ai du mal a saisir ce que tu veux faire....
    peu importe : l'important c'est qu'il y ait 9 caractères ( '.' pouvant être inclus) et que la valeur reste inchangée.
    En fait le fichier dans lequel je dois écrire ces nombres est très restrictif. En gros çà resemble à çà :
    Toto 200601.542100
    Dans l'exemple, le premier champ va forcément du caractère 1 au caractère 4, le deuxième de 5 à 8 et le dernier de 9 à 17. On ne peut pas faire autrement. Donc si jamais la chaîne que je renvoie est trop grande ou trop courte, elle est refusée.

    Voilà, c'est très Ch... mais j'ai po le choix

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


    Il suffit alors de rajouter des 0 à la fin ou au début lorsque tu transforme ton double en String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public static String toString(double value, int lenght) {
    		StringBuffer buffer = new StringBuffer(lenght);
    		buffer.append(value);
    		while(buffer.length()<lenght) {
    			buffer.append('0');
    		}
    		return buffer.toString();
    	}
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( toString(1.5421, 9) );
    A toi de gérer le cas où la chaine fais plus de 9 caractères...

    a++

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

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Points : 278
    Points
    278
    Par défaut
    si tu as le choix des zéros non significatifs
    je les mettrais à la fin pour un décimal et avant pour un entier

    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
        public static String format(String value, int size){
            if (value.indexOf('.') > 0){        
    	        //décimal
                StringBuffer sb = new StringBuffer(String.valueOf(Double.parseDouble(value)));
    	        while(sb.length() < size)
    	            sb.append("0");
    	        return sb.toString();
            } else {
                //entier
                StringBuffer sb = new StringBuffer(String.valueOf(Long.parseLong(value)));
                while(sb.length() < size)
    	            sb.insert(0, "0");
    	        return sb.toString();
            }        
        }

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci, beaucoup!!

    C'est vrai que tout simplement compléter je n'y avais pas pensé...

    (des fois on est tellement dans un problème qu'on ne voit pas la solution toute simple!!)

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

Discussions similaires

  1. Du formatage des nombres
    Par MiJack dans le forum Delphi
    Réponses: 9
    Dernier message: 29/08/2006, 16h34
  2. [XSL-FO] formatage de nombre
    Par qouify dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/05/2006, 13h58
  3. [PHP-JS] Formatage de nombre
    Par goldorax113 dans le forum Langage
    Réponses: 5
    Dernier message: 08/05/2006, 11h50
  4. Formatage de nombres dans une page JSP
    Par Addouna dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 10/03/2006, 13h01
  5. Formatage des nombres à l'affichage
    Par nbutin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 13/07/2004, 10h54

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