Convertir les prix de chiffre en lettre

Signaler
Messages postés
1
Date d'inscription
samedi 3 février 2007
Statut
Membre
Dernière intervention
3 février 2007
-
japee
Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
-
je suis coincé sur un point qui me semble important je cherche un algorithme a integrer dans mon application qui me permet de convertir les prix de leur valeur en chiffre en lettre

3 réponses

Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Salut,

Cet algorithme existe peut-être, mais c'est amusant à bricoler par soi-même.
Voilà le principe que j'adopterais :
Pour les nombres de 0 à 99, j'encoderais les montants dans un fichier texte (une ligne par montant) que tu charges en mémoire dans un TStringList. L'item[0] = 'zéro', l'item[12] = 'douze'...
Il faut convertir ton nombre en string et créer une fonction qui va analyser ce string en fonction de sa longueur (si tu as besoin de décimales, il faudra d'abord traiter la partie entière, puis la partie fractionnaire).

Exemple : 2354 à convertir.

function Transform(var S: string): string;
begin
case Length(S) of
   1,2 : begin
             Result:= MonStringList.Items[StrToInt(S)]; 
             S:= '';
           end;
      3:  begin
               if StrToInt(S[1] >= 2 then Result:= MonStringList.Items[StrToInt(S[1])] + ' cent '
               else Result:= ' cent ';
               // problème ici : il faut gérer 'cent' ou 'cents' selon qu'il y a des chiffres après
               Delete(S,1,1);
           end;
       4 : begin
                if StrToInt(S[1] >= 2 then Result:= MonStringList.Items[StrToInt(S[1])] + ' mille '
               else Result:= ' mille ';
               // quelle chance, mille est invariable !
               Delete(S,1,1);
            end;
     ...
        
Montant:= IntToStr(2354);
MontantFinal:= '';
while Montant <> '' do
    MontantFinal:= MontantFinal + Transform(Montant);

1° passage : montant final =  'deux mille '
2° passage:  montant final = 'deux mille trois cent '
3° passage: montant final = 'deux mille trois cent cinquante quatre'

Je le répète, ce n'est que le principe, il y a plein de trucs à affiner... et à tester !
 
A +
Thierry   
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Je l'avais dit qu'il y avait plein de choses à affiner !
2024 va me renvoyer 'deux mille cent vingt quatre' : si la longeur est 3 et que le premier caractère est zéro, Result doit être ' '.
Idem pour les 4...
Remarque : remplacer "if StrToInt(S[1]) >= 2" peut devenir plus simplement "if S[1] >= '2' 
Aller, bon amusement.
Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
3
Arrivé sur CodeS-SourceS le 03/02/2007 17:27:55 

Avant toute chose, afin d'utiliser convenablement le forum :

[reglement.aspx Voir le règlement de CodeS-SourceS]

Sinon, y'a pas mal de codes qui font ça plus ou moins bien sur le site (moteur de recherche ! ).
Je suis moi-même en train de travailler sur quelque chose qui y ressemble.