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
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
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
ou encore, à base de remplacement de chaine par exemple
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);
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
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 !
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),])
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]);
Blaise PascalNous 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.
PS : n'oubliez pas le tag
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
salut
tu as essayé avec des longint ou integer ?
Blaise PascalNous 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.
PS : n'oubliez pas le tag
Bonjour,
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
ne soit pas nécessaire !Envoyé par MIWAN
"aide toi et le docwiki t'aidera" lire l'aide de format vous aurait donné la solution
totalement d'accord, cela me choquait mais j'ai appliqué à la lettre le "cahier des charges"Envoyé par tourlourou
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;Chacune ayant ses avantages et inconvénientsen changeant FormatSettings 14T258K500 g
En utilisant ReplaceStr 14 T 258 Kg 500 g
Calculs 14 T 258 K 500 g
- 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
etc..10000000 -> 10 T
10 -> 10 g
10000 -> 10 K
1005000 -> 10 T 50 K
1000000000 -> 1000 T
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
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
Mon problème avec ce problème, c'est comme cela peut-il être un problème ?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
(#,###,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
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
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
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 !
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
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager