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 :

Comment padder à droite, des double avec des zeros pas des blancs ?


Sujet :

Langage Java

  1. #1
    Membre averti
    Avatar de Pierre8r
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 518
    Points : 341
    Points
    341
    Par défaut Comment padder à droite, des double avec des zeros pas des blancs ?
    Bonjour,

    Extrait du programme Java, me permettant d'écrire des valeurs double dans un fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    		writer = new PrintWriter(file);
     
    		for (PriceBar priceBar : priceBars) {
    			DateTime dateTime = new DateTime(priceBar.getDate());
    			DateTimeFormatter fmt = DateTimeFormat
    					.forPattern("MM/dd/yyyy HH:mm:ss");
    			String strDate = fmt.print(dateTime);
     
    			writer.println(strDate + "," + priceBar.getOpen() + ","
    					+ priceBar.getHigh() + "," + priceBar.getLow() + ","
    					+ priceBar.getClose() + "," + priceBar.getVolume());
    		}
    		writer.close();

    Extrait du fichier texte généré :

    01/02/2007 01:05:00,1.9652,1.9652,1.96515,1.9652,-5
    01/02/2007 01:10:00,1.9652,1.9652,1.96505,1.96505,-5
    01/02/2007 01:15:00,1.96505,1.9652,1.96505,1.9651,-5
    01/02/2007 01:20:00,1.9651,1.96525,1.96495,1.9651,-5
    01/02/2007 01:25:00,1.9651,1.9652,1.9649,1.9652,-5
    01/02/2007 01:30:00,1.9652,1.9652,1.96465,1.96475,-5
    01/02/2007 01:35:00,1.96475,1.9648,1.9645,1.96455,-5
    01/02/2007 01:40:00,1.96455,1.9647,1.96435,1.96435,-5
    01/02/2007 01:45:00,1.96435,1.9645,1.96435,1.96445,-5
    En fait je souhaiterai générer les valeurs doubles en les paddant avec des zeros à droite, pas des blancs.
    Comme ceci :

    01/02/2007 02:04:00,1.965200,1.965200,1.965150,1.965200,-5
    01/02/2007 02:09:00,1.965200,1.965200,1.965050,1.965050,-5
    01/02/2007 02:14:00,1.965050,1.965200,1.965050,1.965100,-5
    01/02/2007 02:19:00,1.965100,1.965250,1.964950,1.965100,-5
    01/02/2007 02:24:00,1.965100,1.965200,1.964900,1.965200,-5
    01/02/2007 02:29:00,1.965200,1.965200,1.964650,1.964750,-5
    Comment écrire les valeurs double dans mon fichier texte, en paddant avec des zeros pas des blancs ?

    Merci,

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Points : 52
    Points
    52
    Par défaut
    J'ai une demande identique pour une interface que je réalise avec siemens.
    Ou eut leur demande est la suivante :
    quand il spécifie une valeur en numérique il font par exemple :
    quantité 9,3 cela veut dire 000001,000
    9 caractère trois derrière la virgule.

    Par contre j'ai l'avantage d'utiliser des string :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     /**
         * 
         * @param left
         * @param right
         * @param stringleft
         * @param stringright
         * @return
         */
        private String getNumeric(int left,int right ,String stringleft, String stringright)
        {
            stringleft=this.getNumericLeft(left, stringleft);
            stringright=this.getNumericRight(right, stringright);
            return stringleft.concat(",").concat(stringright);
        }        
     
        /**
         * 
         * @param left
         * @param right
         * @param stringleft
         * @return
         */
        private String getNumericLeft(int left,String stringleft)
        {
            while (stringleft.length()<left)
            {
                stringleft="0".concat(stringleft);
            }
            return stringleft;
        }  
     
        /**
         * 
         * @param left
         * @param stringleft
         * @return
         */
        private String getNumericRight(int right,String stringright)
        {
            while (stringright.length()<right)
            {
                stringright=stringright.concat("0");
            }
            return stringright;
        }

    Donc il faut que tu cast pour ma méthode....

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 857
    Points
    22 857
    Billets dans le blog
    51
    Par défaut
    La classe DecimalFormat permet de specifier via des patterns le nombre de chiffres avant et apres la virgule/le point ainsi que de specifier des zero obligatoires si besoin lors du formattage de nombres (voir '0' et '#') .

    De plus, la partie entiere du log (logarithme base 10) d'un nombre permet de connaitre le rang de ce nombre (en supposant log(0) = 0) .

    ex :
    log(1) = 0
    log(10) = 1
    log(100) = 2
    log(1000) = 3
    log(2000) = 3
    ...

    Ce qui permet de facilement rajouter les zeros necessaires via une boucle (il faut connaitre le plus grand nombre en avance bien sur) si besoin de faire ca manuellement.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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


    Sinon il y a un moyen simple en utilisant le format/printf de Java 5.0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	String.format(Locale.FRENCH, "%09.3f", 1.0);	// 00001,000
    	String.format(Locale.US, "%09.3f", 1.0);		// 00001.000
    	String.format("%09.3f", 1.0); // Selon la locale
    a++

  5. #5
    Membre averti
    Avatar de Pierre8r
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 518
    Points : 341
    Points
    341
    Par défaut
    Merci à tous.

    Je garde la solution d'adiGuba.

    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
     
    		for (PriceBar priceBar : priceBars) {
    			DateTime dateTime = new DateTime(priceBar.getDate());
    			DateTimeFormatter fmt = DateTimeFormat
    					.forPattern("MM/dd/yyyy HH:mm:ss");
    			String strDate = fmt.print(dateTime);
     
    			writer.println(strDate
    					+ String.format(Locale.US, ",%08.6f,%08.6f,%08.6f,%08.6f," +
    							"",
    							priceBar.getOpen(), priceBar.getHigh(), priceBar
    									.getLow(), priceBar.getClose())
    					+ priceBar.getVolume());
     
    		}
    		writer.close();

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

Discussions similaires

  1. ma table ne supporte pas des données avec apostrophe
    Par Alexandrebox dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/04/2008, 22h36
  2. Réponses: 2
    Dernier message: 24/11/2007, 18h15
  3. [PHP-JS] bouton reset ne supprimant pas des champs avec value
    Par SegmentationFault dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2006, 14h52
  4. Réponses: 8
    Dernier message: 20/01/2006, 13h46

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