Is there a library or a class/function that I can use to convert an integer to it\'s verbal representation?
Example input:
4,567,788`
Here is the spanish version:
public static string numeroALetras(int number)
{
if (number == 0)
return "cero";
if (number < 0)
return "menos " + numeroALetras(Math.Abs(number));
string words = "";
if ((number / 1000000) > 0)
{
words += numeroALetras(number / 1000000) + " millón ";
number %= 1000000;
}
if ((number / 1000) > 0)
{
words += (number / 1000) == 1? "mil ": numeroALetras(number / 1000) + " mil ";
number %= 1000;
}
if ((number / 100) == 1)
{
if (number == 100)
words += "cien";
else words += (number / 100)> 1? numeroALetras(number / 100) + " ciento ":"ciento ";
number %= 100;
}
if ((number / 100) > 1)
{
var hundredMap = new[] {"","", "dosc", "tresc", "cuatroc", "quin", "seisc", "sietec", "ochoc", "novec" };
if (number > 199)
words += hundredMap[number/100] + "ientos ";
else {
words += numeroALetras(number / 100) + " ientos ";
}
number %= 100;
}
if (number > 0)
{
if (words != "")
words += " ";
var unitsMap = new[] { "cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve", "veinte" };
var tensMap = new[] { "cero", "diez", "veinti", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa" };
if (number < 21)
words += unitsMap[number];
else
{
words += tensMap[number / 10];
if ((number % 10) > 0)
words += ((number % 10)>2?" y ": "") + unitsMap[number % 10];
}
}
return words;
}