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

 Delphi Discussion :

aide format nombre en poids


Sujet :

Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut aide format nombre en poids
    Bonjour
    Voila mon problème
    J’ai une format de sept chiffres exp : (2,745,391) ou (2,745 391)
    Comment écrie 2 T 745 K et 391 g c’est-à-dire convertir format= (#,###,000) en unité de poids

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonsoir,

    à mon avis il faut un peu de code la commande format ne peut pas tout quoique, en jouant sur les formatsettings si ça ne dépasse pas les 1000 tonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // inconvénient , un seul caractère 
    AFormatSettings:=TFormatSettings.Create;
    AFormatSettings.DecimalSeparator:='K';
    AFormatSettings.ThousandSeparator:='Q';
    AString:=Format('%.3f g',[Poids/1000],AFormatSettings);
    ou encore, à base de remplacement de chaine par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AString:=Format('%.3f',[Poids/1000]);
    AString:=ReplaceStr(AString,DecimalSeparator,' K ');
    AString:=ReplaceStr(AString,ThousandSeparator,' Q ');
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Si Q est le sigle de la Tonne (1000 kg) plutôt que du Quintal (100 kg), le code est juste !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Invité
    Invité(e)
    Par défaut
    ou quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    maChaine := '2,745,391';
     
    Format('%s Q %s K et %s g', 
              [Copy(maChaine, 1, 1),
               Copy(maChaine, 3, 3),
               Copy(maChaine, 7, 3),])

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Poids := 2745391;
     
    IT :=  Poids Div 1000000;  // on Cherche la tonne
    IK :=  (Poids-(IQ*1000000)) Div 1000;// on cherche les kilo
    IG :=  (Poids-(IQ*1000000))-IK*1000;// le reste en gramme
     St := Format('%d Q %d K et %d g',[IT,IK, IG]);
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Merci a tous
    Master votre code marche impeccable sauf qu'il n'a affiche pas l'unité Q (2745K391g) .
    benoit1024 j'ai oublié de dire que les chiffres sont des variables . j'ai essayé avec copy() , strleft() , strRight....pas moyenne
    anapurna j'ai essayé votre code mais donne erreur : opérateur non applicable à ce type d'opérande
    IK := (Poids-(IQ*1000000)) DIV 1000;// on cherche les kilo
    j'ai joué avec Extended , Double mais toujours le même message.

    j'attend toujours votre aide

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    tu as essayé avec des longint ou integer ?
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par MIWAN Voir le message
    Master votre code marche impeccable sauf qu'il n'a affiche pas l'unité Q (2745K391g) .
    Il suffit de remplacer '%.3f' qui n'affiche pas les séparateur de milliers par '%.3n', comme je fermai boutique je n'avais pas vérifier ce point, vous aviez les bases nécessaires pour que cette remarque
    Citation Envoyé par MIWAN
    j'attend toujours votre aide
    ne soit pas nécessaire !
    "aide toi et le docwiki t'aidera" lire l'aide de format vous aurait donné la solution
    Citation Envoyé par tourlourou
    Si Q est le sigle de la Tonne (1000 kg) plutôt que du Quintal (100 kg)
    totalement d'accord, cela me choquait mais j'ai appliqué à la lettre le "cahier des charges"

    Voilà 3 propositions qui fonctionnent
    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
    procedure TForm3.btnFormatClick(Sender: TObject);
    var Poids : UInt64;
        PoidsStr : String;
        AFormatSettings : TFormatSettings;
    begin
     Poids:=StrToUInt64(edtPoids.text);
     
     memo1.Lines.Clear;
     
     
     AFormatSettings:=TFormatSettings.Create;
     AFormatSettings.DecimalSeparator:='K';
     AFormatSettings.ThousandSeparator:='T';
     PoidsStr:= Format('%.3n g',[Poids/1000],AFormatSettings);
     Memo1.Lines.Add('en changeant FormatSettings  ' +PoidsStr);
     
     PoidsStr:=Format('%.3n g',[Poids/1000]);
     PoidsStr:=ReplaceStr(PoidsStr,FormatSettings.DecimalSeparator,' Kg ');
     PoidsStr:=ReplaceStr(PoidsStr,FormatSettings.ThousandSeparator,' T ');
     Memo1.Lines.Add('En utilisant ReplaceStr '+PoidsStr);
    // solution Anapurna en plus "condensé" 
     Memo1.Lines.Add(Format('Calculs %d T %d K %.3d g',[Poids div 1000000,(Poids div 1000) mod 1000,Poids mod 1000]));
    end;
    en changeant FormatSettings 14T258K500 g
    En utilisant ReplaceStr 14 T 258 Kg 500 g
    Calculs 14 T 258 K 500 g
    Chacune ayant ses avantages et inconvénients
    - la première nécessite que le nombre ne dépasse pas 1000 tonnes, le séparateur décimal, comme celui des milliers ne peut faire qu'un caractère
    - la seconde nécessite que le nombre ne dépasse pas 1000 tonnes
    - la dernière que le poids soit au moins d'une tonne

    bien sûr il existe une solution qui n'a aucun inconvénient, la dernière ligne 'Calculs' permet de voir la solution et qui pourra gérer le tout
    10000000 -> 10 T
    10 -> 10 g
    10000 -> 10 K
    1005000 -> 10 T 50 K
    1000000000 -> 1000 T
    etc..
    AMHA un peu de recherche sans vous fournir cette solution vous sera bénéfique
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est un basique,
    c'est vrai que l'on affiche pas souvent des poids
    Par contre suffisait de penser comme on exprime une durée (voir FormatMS) pour trouver la réponse très rapidement qui est celle de anapurna
    C'est une simple question de mathématique

    Bonjour
    Voila mon problème
    J’ai une format de sept chiffres exp : (2,745,391) ou (2,745 391)
    Comment écrie 2 Q 745 K et 391 g c’est-à-dire convertir format= (#,###,000) en unité de poids
    Mon problème avec ce problème, c'est comme cela peut-il être un problème ?

    (#,###,000)
    Alors T et K sont optionnels, g est forcément exprimé en 3 digits obligatoire, c'est le cahier des charges

    Au lieu de faire des div et mod, voici une autre approche System.ConvUtils.Convert et System.StdConvs


    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
    function FormatPoids(AMasse: Double): string;
    var
      V: Double;
      Tonne, Kilo, Gramme, MilliGramme: Cardinal;
      Fmt: string;
    begin
      V := System.ConvUtils.Convert(AMasse, System.StdConvs.muGrams, System.StdConvs.muMetricTons);
      Tonne := Trunc(V);
      if Tonne > 0 then
        Fmt :=  '%0:d T '; // T ou Q ?
     
      V := System.ConvUtils.Convert(V - Tonne, System.StdConvs.muMetricTons, System.StdConvs.muKilograms);
      Kilo := Trunc(V);
      if Kilo > 0 then // if (Kilo > 0) or (Tonne > 0) then // débat si l'on affiche le "n T 0 K xxx g" ou simplification "n T xxx g"
        Fmt := Fmt + '%1:d K ';
     
      V := System.ConvUtils.Convert(V - Kilo, System.StdConvs.muKilograms, System.StdConvs.muGrams);
      Gramme := Trunc(V);
      Fmt := Fmt + '%2:.3d g ';
     
      V := System.ConvUtils.Convert(V - Gramme, System.StdConvs.muGrams, System.StdConvs.muMilligrams);
      MilliGramme := Trunc(V);
      if MilliGramme > 0 then
        Fmt := Fmt + '%3:.3d mg ';
     
      Result := Format(Fmt, [Tonne, Kilo, Gramme, MilliGramme]);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TZooThomVCLMainForm.Button6Click(Sender: TObject);
    begin
      ShowMessage(FormatPoids(2745391)); // 2 T 745 K 391 g 
      ShowMessage(FormatPoids(45391.12)); // 45 K 391 g 120 mg 
      ShowMessage(FormatPoids(0)); // 000 g 
      ShowMessage(FormatPoids(0.3)); // 000 g 300 mg 
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Bonsoir a tous
    C’est vrais que les codes concernant les mesures en générale sont presque introuvables et mon poste là éclaire ce qu’était flou dans ce genre .

    ShaiLeTroll
    C'est la première fois que j'entends de ces deux Unitées (convUtils, StdConvs)

    en plus votre function donne une grande marge pour manipuler les mesures et même les modifier

    benoit,Sergio,anapurna,ShaiLeTroll
    je suis satisfait et reconnaissant pour toutes aide de votre parts.
    vous êtes une mine d'or

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Un dernier mot :

    tout le monde a écrit K avec un K majuscule, qui est l'abréviation de la température mesurée en degrés Kelvin, et n'a donc rien à voir avec l'unité k minuscule qui est l'abréviation de kilo.

    Mais en plus, k tout seul ne veut rien dire et doit obligatoirement être associé à l'unité de la chose mesurée, kg pour kilogramme, km pour kilomètre, kb pour kilobyte, etc.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Un dernier mot :
    Non pas le dernier, tu aurais pu ajouter que le gramme n'est pas une unité de poids, mais l'unité de masse.

    André

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ...qui est l'abréviation de la température mesurée en degrés Kelvin,
    Pour être tout à fait exact

  14. #14
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Un mot de plus : l'unité SI de température n'est plus le degré Kelvin, mais le Kelvin depuis 1967 !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par Jipété Voir le message
    tout le monde a écrit K avec un K majuscule...
    Dans mon premier code j'avais écrit kg mais pour un soucis de respect du cahier des charges et de compréhension, j'ai suivi le K ... et puis tu as bien Q et T qui sont flous aussi
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    et puis tu as bien Q et T qui sont flous aussi
    Tu as raison :
    quintal
    tonne

    Citation Envoyé par ShaiLeTroll Voir le message
    Dans mon premier code j'avais écrit kg mais pour un souci de respect du cahier des charges et de compréhension, j'ai suivi le K ...
    Et si le cahier des charges te dit de te suicider tu vas te tirer une balle ?

    Un cahier des charges erroné, àmha il faut le remettre dans le droit chemin !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/01/2024, 15h32
  2. [FB1.5.3] Date au format "nombre de secondes"
    Par SamRay1024 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/03/2006, 05h38
  3. Formater des cellules excel en format nombre
    Par _developpeur_ dans le forum Access
    Réponses: 7
    Dernier message: 09/01/2006, 14h13
  4. Débutant: Aide avec nombre Armstrong
    Par D3V1L J4M dans le forum C++
    Réponses: 5
    Dernier message: 31/10/2005, 11h35
  5. [Format]nombres avec des 0
    Par zozolh2 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 01/06/2004, 08h43

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