karimaitouares
Messages postés1Date d'inscriptionsamedi 3 février 2007StatutMembreDernière intervention 3 février 2007
-
3 févr. 2007 à 18:01
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDerniè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:
Convertir chiffre en lettre arabe delphi
Prix en lettre - Meilleures réponses
Conjugueur chiffre en lettre - Meilleures réponses
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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 !
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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.