Convertir les prix de chiffre en lettre

karimaitouares Messages postés 1 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 3 février 2007 - 3 févr. 2007 à 18:01
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 - 3 févr. 2007 à 23:26
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
A voir également:

3 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
3 févr. 2007 à 19:55
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   
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
3 févr. 2007 à 20:05
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.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
3 févr. 2007 à 23:26
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.
Rejoignez-nous