http://michael.carbenay.info

Conversion chiffres vers lettres

05 janv. 2006  –  C#  –  0 Commentaires
Voici une petite classe qui permet de convertir un nombre donnée en lettres.Le code est en C#, et devrait donc fonctionner sur toute la plateforme .net
/// <summary>
/// Conversion de chiffres vers lettres.
/// </summary>
public class Convertisseur
{
  /// <summary>
  /// Converti une valeur en euros
  /// </summary>
  /// <param name="valeur">
  /// La valeur à convertir</param>
  /// <returns>Une chaine correspondant au nombre</returns>
  /// <remarks>format xxx euro et yyy cent(s)</remarks>
  public static string ConvertirEuro(decimal valeur)
  {
    return Convertir(valeur, 2, " euro", " cent(s)", " et ");
  }

  /// <summary>
  /// Conversion d'une valeur decimal en lettres
  /// </summary>
  /// <param name="valeur">Valeur à convertir</param>
  /// <param name="nbDecimales">
  /// Nombre de décimale à conserver&l t;/param>
  /// <returns>Une chaine correspondant au nombre</returns>
  /// <remarks>Pas d'unités, séparateur = ","</remarks>
  public static string Convertir(decimal valeur,
    int nbDecimales)
  {
    return Convertir(valeur, nbDecimales, "", "", ",");
  }

  /// <summary>
  /// Conversion d'une valeur decimal en lettres
  /// </summary>
  /// <param name="valeur">La valeur à convertir</param>
  /// <param name="nbDecimales">
  /// Le nombre de decimales à conserver</param>
  /// <param name="uniteEntiere">
  /// Le nom des unités de la partie entière</param>
  /// <param name="uniteDecimale">
  /// Le nom des unité de la partie décimale</param>
  /// <param name="separateur">le séparateur entre les parties</param>
  /// <returns>Une chaine correspondant au nombre</returns>
  public static string Convertir(decimal valeur, 
    int nbDecimales, 
    string uniteEntiere, 
    string uniteDecimale, 
    string separateur)
  {
    valeur = Math.Round(valeur,nbDecimales);

    int val = (int) Math.Floor((double) valeur);
    string ret = Convertir(val) + uniteEntiere;

    valeur = valeur - val;
    valeur = valeur * (int) (Math.Pow(10,nbDecimales));
    val = (int) Math.Floor((double) valeur);
    if(val>0)
      ret += separateur + Convertir(val) + uniteDecimale;
    
    return ret;
  }

  /// <summary>
  /// Conversion d'un entier en lettre
  /// </summary>
  /// <param name="nombre">
  /// L'entier à convertir</param>
  /// <returns>Une chaine correspondant au nombre</returns>
  public static string Convertir(int nombre)
  {
    StringBuilder lettre = new StringBuilder();
    int centaine, dizaine, unite, reste, y;
    reste = nombre;
    
    for(int i=1000000000; i>=1; i/=1000)
    {
      y = reste/i;
      if(y!=0)
      {
        centaine = y/100;
        dizaine  = (y - centaine*100)/10;
        unite = y-(centaine*100)-(dizaine*10);
        switch(centaine)
        {
          case 0:
            break;
          case 1:
            lettre.Append(Convert(centaine*100));
            lettre.Append(" ");
            break;
          defaul t :
            lettre.Append(Convert(centaine));
            lettre.Append(" ");
            lettre.Append(Convert(100));
            if((dizaine == 0)&&(unite == 0)) lettre.Append("s ");
            else lettre.Append(" ");
            break;
        }
            
        switch(dizaine)
        {
          case 0:
            if(unite!=1 || (unite==1 && i!=1000) )
            {
              lettre.Append(Convert(unite));
              if(unite!=0) lettre.Append(" ");
            }
            break;
          case 1:
            lettre.Append(Convert(dizaine*10+unite));
            lettre.Append(" ");
            break;
          case 7:
            goto case 1;
          case 9:
            goto case 1;
          default :
	    lettre.Append(Convert(dizaine*10));
            if(unite==1 && dizaine!=8) lettre.Append("-et-");
            else lettre.Append(" ");
            lettre.Append(Convert(unite));
            lettre.Append(" ");
            break;

        } 
        switch (i)
        {
          case 1000000000:
            if(y>1) lettre.Append("milliards ");
            else lettre.Append("milliard ");
            break;
          case 1000000:
            if(y>1) lettre.Append("millions ");
            else lettre.Append("million ");
            break;
          case 1000:
            lettre.Append("mille ");
            break;
        }
      } 
      reste -= y*i;
    } // end for
    if(lettre.Length ==0) return "zero"; 
    
    return lettre.ToString().Trim();  
  }

  private static string Convert(int nb)
  {
    switch(nb)
    {
      case 0: return "";
      case 1: return "un";
      case 2: retur n "deux";
      case 3: return "trois";
      case 4: return "quatre";
      case 5: return "cinq";
      case 6: return "six";
      case 7: return "sept";
      case 8: return "huit";
      case 9: return "neuf";
      case 10: return "dix";
      case 11: return "onze";
      case 12: return "douze";
      case 13: return "treize";
      case 14: return "quatorze";
      case 15: return "quinze";
      case 16: return "seize";
      case 17: return "dix-sept";
      case 18: return "dix-h uit";
      case 19: return "dix-neuf";
      case 20: return "vingt";
      case 30: return "trente";
      case 40: return "quarante";
      case 50: return "cinquante";
      case 60: return "soixante";
      case 70: return "soixante-dix";
      case 71: return "soixante-onze";
      case 72: return "soixante-douze";
      case 73: return "soixante-treize";
      case 74: return "soixante-quatorze";
      case 75: return "soixante-quinze";
      case 76: return "soixante-seize";
      case  77: return "soixante-dix-sept";
      case 78: return "soixante-dix-huit";
      case 79: return "soixante-dix-neuf";
      case 80: return "quatre-vingt";
      case 90: return "quatre-vingt-dix";
      case 91: return "quatre-vingt-onze";
      ca se 92: return "quatre-vingt-douze";
      case 93: return "quatre-vingt-treize";
      case 94: return "quatre-vingt-quatorze";
      case 95: return "quatre-vingt-quinze";
      case 96: return "quatre-vingt-seize";
      case 97: return "quatre-ving t-dix-sept";
      case 98: return "quatre-vingt-dix-huit";
      case 99: return "quatre-vingt-dix-neuf";
      case 100: return "cent";
      case 1000: return "mille";
    }
    return "";
  }
}

Ajouter un commentaire


(Affichera votre icône Gravatar)

biuquote
  • Commentaire
  • Aperçu immédiat
Loading