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 Delphi Discussion :

Formatage d'un nombre entier


Sujet :

Langage Delphi

  1. #1
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 53
    Points
    53
    Par défaut Formatage d'un nombre entier
    Je voudrais formater mes minutes de façon à avoir un bon alignement des chiffres.
    X est un integer.

    Sans formatage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListBox1.Items.Add(' Min : '+IntToStr(x-2 ));
    Essai de formatage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListBox1.Items.Add(' Min : '+Format('x-2=%d',[x-2]));
    Compilation ok mais
    EconvertError au lancement ...

    Bref comment formater simplement pour aligner 2 caractères ?

    (En pascal ça se faisait simplement avec WriteLn (x:2) !!

    Merci

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    As-tu vérifié la valeur de x avant de lancer ces fonctions?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 53
    Points
    53
    Par défaut
    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.Add(' Min : '+IntToStr(x-2 ));
    fonctionne bien, c'est donc ma ligne (essai) de formatage qui entraîne cette erreur.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Es-tu sûr que X est bien de type Integer, car %d fonctionne parfaitement dans ce cas.

    @+ Claudius

  5. #5
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 53
    Points
    53
    Par défaut
    Effectivement, à cause d'un Timer (qui étant à Enabled au lmancement du progr. ne lisait pas l'initialisation de la variable integer x) j'avais une erreur uniquement avec la demande de format.

    x est bien integer et il est incrémenté de 1 à chaque fois.

    En cherchant un peu plus j'ai vu que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.Add ('Minute :'+Format('%.2d',[x-2]));
    fonctionnait... mais j'obtiens :
    01
    02 etc...

    09
    10

    alignés (unités sous unités, dizaine sous dizaine)

    Mais : peut-on se débarrasser du zéro ? pour avoir 1 et non pas 01 etc...

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par DURVILLE
    Mais : peut-on se débarrasser du zéro ? pour avoir 1 et non pas 01 etc...
    Oui:
    normalement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListBox1.Items.Add (Format('Minute %u',[x-2]));
    A vérifier.
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 53
    Points
    53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.Add (Format('Minute %u',[x-2]));
    Il faut mettre %2u et on obtient le chiffre des unités placé bizarrement
    en alignement au milieu du 1 et 0 de 10 !
    Donc pas encore tout à fait ça !


    Par ailleurs, tant qu'on y est pour les formatage:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.Add (Format('Battements %s',[Edit1.text]));
    ne me permet pas d'aligner cette chaîne à droite :

    (ce sont des string cette fois)

    (unités sous unités, dizaines sous dizaines etc ...)

  8. #8
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par DURVILLE Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.Add (Format('Minute %u',[x-2]));
    Il faut mettre %2u et on obtient le chiffre des unités placé bizarrement
    en alignement au milieu du 1 et 0 de 10 !
    Donc pas encore tout à fait ça !
    Comment ça?
    Dis-nous quel résultat tu voudrais avoir pour qu'on puisse t'aider
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 538
    Points
    8 538
    Par défaut
    SAlut
    Cela vient de la police utilisée, si tu utilise une font telle que System, ton probleme sera (je pense) resolu, en effet dans la majorité des Font 1 et 0 par exemple ne tiennent pas la meme place en largeur :s

    [Edit]
    Pour ta 2eme question au sujet de l'alignement a droite, je pense que c'est a toi de generer avec format le nombre d'espace naicessaire entre
    Battements et le mot que tu rajoutePour avoir ce resultat

    Battements_______Plus
    Battements_Compliquer
    Battements_________A
    Battements______Faire

    Je mets des Underscore a la place des espace par ce que l'editeur me laisse pas faire ce que je veux
    [/Edit]


    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 53
    Points
    53
    Par défaut
    A cause de l'éditeur du forum (comme le fait remarquer QWAZERTY) je ne peux malheureusement pas reproduire ce que je veux ...
    qui est pourtant très clair : aligner unités sous unités et dizaines sous dizaines.

    0
    1
    2

    10
    11....
    Le zéro de 10 aligné sous les unités 1, 2 ....
    (L'éditeur ne respecte pas ce que je veux faire même en plaçant 2 espaces devant mes unités)

    J'ai essayé d'autres polices (dont système) et avec 'minute %2.u' j'obtiens toujours un alignement un peu décalé de sorte que 9 se trouve au milieu - au-dessus - de 1 et 0 de 10 !!

    Pour l'alignement des strings je suis toujours en panne aussi !

    j'espère que la nuit (ou vous chers spécialistes de Delphi !) me portera conseil ....!

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 538
    Points
    8 538
    Par défaut
    SAlut
    Bon j'ai pas d'explication mais en ajoutant 1 espace de plus ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Var I : Integer;
        StrI : String;
    begin
         For I := 0 To 10 Do
         begin
              //ListBox1.Items.Add('Minute :'+Format('%.2d',[I]));
              StrI := IntToStr(I);
              If Length(StrI) < 2 then StrI := '  ' + StrI;
              ListBox1.Items.Add (Format('Minute %s',[StrI]));
         end;
    end;
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 53
    Points
    53
    Par défaut
    Je pensais que c'était simple...
    Va falloir réinventer la roue ?

    En simplifiant à l'extrême (faites le test chez vous !)
    on s'aperçoit que ce formatage est rebelle :
    Que ce soit avec integer, byte, word ... !
    Que ce soit avec un memo ou un listbox...
    Que ce soit avec %2d ou %2u ou %2.d ...
    Quelle que soit la police (system, TT etc ...)

    Donc un alignement qui n'est pas parfait, comme s'il y avait 1/2 espace et non un entier lorsque l'on passe de 9 à 10...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Procedure TForm1.Button1Click(Sender:Tobject));
    Var i :Integer // byte, word idem
     
    Begin
    For i:=8 to 11 do
    Memo1.Lines.Add(Format('%2d',[i]));     // %2.d idem  ListBox = idem
    end;
    end.
    Il doit bien y avoir une soluce , non ??

  13. #13
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Avec :
    Code delphi : 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
    procedure TForm1.FormCreate(Sender: TObject);
    const
      vStrings: array [0..2] of string = ('Blabla', 'Encore', 'pourquoi pas');
    var
      vIndice: Integer;
    begin
      Memo1.Lines.Clear;
     
      for vIndice := 0 to 15 do
        begin
          Memo1.Lines.Add(Format('Toto: %:2d', [vIndice]))
        end;
     
      for vIndice := Low(vStrings) to High(vStrings) do
        begin
          Memo1.Lines.Add(Format('Toto: %:15s', [vStrings[vIndice]]));
        end;
     
    end;
    et la font du mémo: Bitstream Vera Sans Mono 8pt
    cela donne :

    Pour la police il faut donc une police a chasse fixe (Courrier, Courrier New, Bitstream Vera Sans Mono, n'importe quoi mono, ...)
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  14. #14
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par DURVILLE Voir le message
    Il doit bien y avoir une soluce , non ??
    La seule solution que je vois est d'afficher les 0 non significatifs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Memo1.Lines.Add(Format('%.2d',[i]));
    @+ Claudius

  15. #15
    Inactif  
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 53
    Points
    53
    Par défaut
    Qwazerty nous avait mis sur la voie : histoire de police ...
    Neilbgr transforme l'essai : effectivement avec COURIER New par exemple
    l'alignement est OK.
    (peu importe l'écriture : %2d, %:2d)
    Par contre une variante avec %.2d : met un zéro devant les unités simples.

    MERCI à tous ...

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

Discussions similaires

  1. SSIS 2005 - Formatage d'un nombre entier
    Par mochi dans le forum SSIS
    Réponses: 4
    Dernier message: 26/11/2008, 16h07
  2. Inverser nombre entier de 4 chiffres
    Par zenattitude dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2005, 15h18
  3. Format des nombres entiers, séparateurs de milliers
    Par zazaraignée dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2005, 01h25
  4. nombre entier
    Par eleve36 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/10/2005, 16h25
  5. [LG]Former un nombre entier à partir de chiffre naturel.
    Par lecanardjaune dans le forum Langage
    Réponses: 2
    Dernier message: 12/11/2003, 22h36

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