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 : 70
    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 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 872
    Points : 22 939
    Points
    22 939
    Billets dans le blog
    53
    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.

  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 : 70
    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, 23h36
  2. Réponses: 2
    Dernier message: 24/11/2007, 19h15
  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, 15h52
  4. Réponses: 8
    Dernier message: 20/01/2006, 14h46

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