Voici un code que je souhaitais partager de puis bien longtemps: il se charge d' opérer la conversion d'un montant représenté par un entier vers sa représentation en toutes lettres.
/// <summary>
/// Convertion d'un montant en toutes lettres
/// </summary>
/// <param name="values"></param>
/// <returns></returns>
public static String Int2Lettres(Int32 value)
{
//en cas de besoin pour vérifier l'orthographe
//http://orthonet.sdv.fr/pages/lex_nombres.html
Int32
division,
reste;
StringBuilder sb;
try
{
//Test l'état null
if (value == 0) return "zéro";
//Décomposition de la valeur en milliards, millions, milliers,...
sb = new StringBuilder();
//milliard
division = Math.DivRem(value, 1000000000, out reste);
if (division > 0)
{
Int2LettresBloc(sb, division);
sb.Append(" milliard");
if (division > 1) sb.Append('s');
}
if (reste > 0)
{
//million
value = reste;
division = Math.DivRem(value, 1000000, out reste);
if (division > 0)
{
if (sb.Length > 0) sb.Append(' ');
Int2LettresBloc(sb, division);
sb.Append(" million");
if (division > 1) sb.Append('s');
}
if (reste > 0)
{
//milliers
value = reste;
division = Math.DivRem(value, 1000, out reste);
if (division > 0)
{
if (sb.Length > 0) sb.Append(' ');
if (division == 1)
sb.Append("mille");
else
{
Int2LettresBloc(sb, division);
sb.Append(" mille");
}
}
if (reste > 0)
{
//reste
if (sb.Length > 0) sb.Append(' ');
Int2LettresBloc(sb, reste);
}
}
}
return sb.ToString();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return String.Empty;
}
finally
{
sb = null;
}
}
/// <summary>
/// Retourne la conversion d'un bloc de 3 bloc
/// </summary>
/// <param name="Value"></param>
/// <returns></returns>
private static void Int2LettresBloc(StringBuilder sb, Int32 value)
{
Boolean b_centaines;
Int32
division,
reste;
try
{
division = Math.DivRem(value, 100, out reste);
//Test si des centaines sont présentes
if (division > 0)
{
//ajout des centaines à la sortie
switch (division)
{
case 1:
{
sb.Append("cent");
break;
}
default:
{
Int2LettresBase(sb, division);
sb.Append(" cent");
break;
}
}
b_centaines = true;
}
else
{
b_centaines = false;
}
//Test si il reste des éléments apres les centaines
if (reste > 0)
{
//Introduction d'un espace si on a intégré des centaines
if (b_centaines) sb.Append(' ');
//Calcul des dixaines et de leurs reste
value = reste;
division = Math.DivRem(value, 10, out reste);
switch (division)
{
case 0:
case 1:
case 7:
case 9:
{
Int2LettresBase(sb, value);
break;
}
default:
{
Int2LettresBase(sb, division * 10);
if (reste > 0)
{
if (reste == 1)
sb.Append(" et un");
else
{
sb.Append('-');
Int2LettresBase(sb, reste);
}
}
break;
}
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
private static void Int2LettresBase(StringBuilder sb, Int32 value)
{
switch (value)
{
case 0: { sb.Append("zéro"); break; }
case 1: { sb.Append("un"); break; }
case 2: { sb.Append("deux"); break; }
case 3: { sb.Append("trois"); break; }
case 4: { sb.Append("quatre"); break; }
case 5: { sb.Append("cinq"); break; }
case 6: { sb.Append("six"); break; }
case 7: { sb.Append("sept"); break; }
case 8: { sb.Append("huit"); break; }
case 9: { sb.Append("neuf"); break; }
case 10: { sb.Append("dix"); break; }
case 11: { sb.Append("onze"); break; }
case 12: { sb.Append("douze"); break; }
case 13: { sb.Append("treize"); break; }
case 14: { sb.Append("quatorze"); break; }
case 15: { sb.Append("quinze"); break; }
case 16: { sb.Append("seize"); break; }
case 17: { sb.Append("dix-sept"); break; }
case 18: { sb.Append("dix-huit"); break; }
case 19: { sb.Append("dix-neuf"); break; }
case 20: { sb.Append("vingt"); break; }
case 30: { sb.Append("trente"); break; }
case 40: { sb.Append("quarante"); break; }
case 50: { sb.Append("cinquante"); break; }
case 60: { sb.Append("soixante"); break; }
case 70: { sb.Append("soixante-dix"); break; }
case 71: { sb.Append("soixante et onze"); break; }
case 72: { sb.Append("soixante-douze"); break; }
case 73: { sb.Append("soixante-treize"); break; }
case 74: { sb.Append("soixante-quatorze"); break; }
case 75: { sb.Append("soixante-quinze"); break; }
case 76: { sb.Append("soixante-seize"); break; }
case 77: { sb.Append("soixante-dix-sept"); break; }
case 78: { sb.Append("soixante-dix-huit"); break; }
case 79: { sb.Append("soixante-dix-neuf"); break; }
case 80: { sb.Append("quatre-vingt"); break; }
case 90: { sb.Append("quatre-vingt-dix"); break; }
case 91: { sb.Append("quatre-vingt-onze"); break; }
case 92: { sb.Append("quatre-vingt-douze"); break; }
case 93: { sb.Append("quatre-vingt-treize"); break; }
case 94: { sb.Append("quatre-vingt-quatorze"); break; }
case 95: { sb.Append("quatre-vingt-quinze"); break; }
case 96: { sb.Append("quatre-vingt-seize"); break; }
case 97: { sb.Append("quatre-vingt-dix-sept"); break; }
case 98: { sb.Append("quatre-vingt-dix-huit"); break; }
case 99: { sb.Append("quatre-vingt-dix-neuf"); break; }
case 100: { sb.Append("cent"); break; }
default: { /*RAS*/ break; }
}
}
