Nombre en lettres (96 -> quatre-vingt seize)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 857 fois - Téléchargée 37 fois

Contenu du snippet

Voici une fonction, renvoyant un integer en string, de façon "manuscrite"
exemple : 96 -> quatre-vingt seize

Source / Exemple :


function EnLettres(N:integer):string;
// TRADUIRE UN NOMBRE EN LETTRES : Limites : de -MaxLongInt À MaxLongInt.
//[Auteur : Participant, news.vienneinfo.org forum nzn.fr.delphi]
Const
  Unite:Array[1..16] of String=('un','deux','trois','quatre','cinq','six',
                                'sept','huit','neuf','dix','onze','douze',
                                'treize','quatorze','quinze','seize');
  Dizaine:Array[2..8]of String=('vingt','trente','quarante','cinquante',
                                'soixante','','quatre-vingt');
  Coefs:Array[0..3]of String=('cent','mille','million','milliard');
Var
  Temp  : String;
  C,D,U : Byte;
  Coef  : Byte;
  I     : Word;
  Neg   : Boolean;
Begin
  If N=0 then
  Begin
    Result:=' zéro';
    Exit;
  End;
  Result:='';
  Neg:= N<0;
  If Neg then N:=-N;
  Coef:=0;
  Repeat
    U:=N mod 10; N:=N div 10; {RÉcupÈre unitÉ et dizaine}
    D:=N mod 10; N:=N div 10; {RÉcupÈre dizaine}
    If D in [1,7,9] then
    Begin
      Dec(D);
      Inc(U,10);
    End;
    Temp:='';
    If D>1 then
    Begin
      Temp:=' '+Dizaine[D];
      If (D<8) and ((U=1) or (U=11)) then
        Temp:=Temp+' et';
    End;
    If U>16 then
    Begin
      Temp:=Temp+' '+Unite[10];
      Dec(U,10);
    End;
    If U>0 then Temp:=Temp+' '+Unite[U];
    If (Result='') and (D=8) and (U=0) then Result:='s';
    Result:=Temp+Result;
    C:=N mod 10; N:=N div 10; {RÉcupÈre centaine}
    If C>0 then
    Begin
      Temp:='';
      If C>1 then Temp:=' '+Unite[C]+Temp;
      Temp:=Temp+' '+Coefs[0];
      If (Result='') and (C>1) then Result:='s';
      Result:=Temp+Result;
    End;
    If N>0 then
    Begin
      Inc(Coef);
      I:=N mod 1000;
      If (I>1) and (Coef>1) then Result:='s'+result;
      If I>0 then Result:=' '+Coefs[Coef]+Result;
      If (I=1) and (Coef=1) then Dec(N);
    End;
  until N=0;
  If Neg then Result:='moins'+result;
end;

Conclusion :


Ce code n'est pas de moi

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
4 mars 2003

bonjour;
j'ai un probleme de telecharge parce que j'avais pas de zip;pourquoi?
Messages postés
214
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
14 mai 2004

Le problème ( minime ) est que ça ne marche pas pour nous les belges puisque nous utilisons les termes "septante & nonante" mais l'idée peut être pratique dans certains cas.
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
28

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.