Convertir Números a Letras en C#

La conversión de números a letras es una característica muy utilizada en sistemas que generalmente controlan alguna cuestión referida al dinero. Me tomé la libertad de actualizar esta entrada, ya que el enlace de descarga ya no funcionaba, aunado al hecho de que le hice unos ajustes a la clase para convertirla en un método de extensión.

Conviértete en un Máster de C# y .NET

Antes de continuar, te invito a que te suscribas a mi academia de entrenamiento para desarrolladores .NET, en la que vas a aprender sobre C#, Blazor, Xamarin, .NET MAUI, ASP.NET, entre muchos otros temas por un mínimo precio.

¿Cómo crear una clase en C# para convertir números a letras?

Si ya has leído la entrada Diferencia entre float, double y decimal, ya sabrás que el tipo de dato idóneo para llevar a cabo el manejo de cantidades enfocadas a dinero, es el tipo decimal, por lo tanto, es el tipo de dato que se espera en la entrada de la clase.

El código resultante es el siguiente:

public static class Conversores
{
    public static string NumeroALetras(this decimal numberAsString)
    {
        string dec;            
           
        var entero = Convert.ToInt64(Math.Truncate(numberAsString));
        var decimales = Convert.ToInt32(Math.Round((numberAsString - entero) * 100, 2));
        if (decimales > 0)
        {
            //dec = " PESOS CON " + decimales.ToString() + "/100";
            dec = $" PESOS {decimales:0,0} /100";
        }
        //Código agregado por mí
        else
        {
            //dec = " PESOS CON " + decimales.ToString() + "/100";
            dec = $" PESOS {decimales:0,0} /100";
        }
        var res = NumeroALetras(Convert.ToDouble(entero)) + dec;
        return res;
    }
    [SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator")]
    private static string NumeroALetras(double value)
    {
        string num2Text; value = Math.Truncate(value);
        if (value == 0) num2Text = "CERO";
        else if (value == 1) num2Text = "UNO";
        else if (value == 2) num2Text = "DOS";
        else if (value == 3) num2Text = "TRES";
        else if (value == 4) num2Text = "CUATRO";
        else if (value == 5) num2Text = "CINCO";
        else if (value == 6) num2Text = "SEIS";
        else if (value == 7) num2Text = "SIETE";
        else if (value == 8) num2Text = "OCHO";
        else if (value == 9) num2Text = "NUEVE";
        else if (value == 10) num2Text = "DIEZ";
        else if (value == 11) num2Text = "ONCE";
        else if (value == 12) num2Text = "DOCE";
        else if (value == 13) num2Text = "TRECE";
        else if (value == 14) num2Text = "CATORCE";
        else if (value == 15) num2Text = "QUINCE";
        else if (value < 20) num2Text = "DIECI" + NumeroALetras(value - 10);
        else if (value == 20) num2Text = "VEINTE";
        else if (value < 30) num2Text = "VEINTI" + NumeroALetras(value - 20);
        else if (value == 30) num2Text = "TREINTA";
        else if (value == 40) num2Text = "CUARENTA";
        else if (value == 50) num2Text = "CINCUENTA";
        else if (value == 60) num2Text = "SESENTA";
        else if (value == 70) num2Text = "SETENTA";
        else if (value == 80) num2Text = "OCHENTA";
        else if (value == 90) num2Text = "NOVENTA";
        else if (value < 100) num2Text = NumeroALetras(Math.Truncate(value / 10) * 10) + " Y " + NumeroALetras(value % 10);
        else if (value == 100) num2Text = "CIEN";
        else if (value < 200) num2Text = "CIENTO " + NumeroALetras(value - 100);
        else if ((value == 200) || (value == 300) || (value == 400) || (value == 600) || (value == 800)) num2Text = NumeroALetras(Math.Truncate(value / 100)) + "CIENTOS";
        else if (value == 500) num2Text = "QUINIENTOS";
        else if (value == 700) num2Text = "SETECIENTOS";
        else if (value == 900) num2Text = "NOVECIENTOS";
        else if (value < 1000) num2Text = NumeroALetras(Math.Truncate(value / 100) * 100) + " " + NumeroALetras(value % 100);
        else if (value == 1000) num2Text = "MIL";
        else if (value < 2000) num2Text = "MIL " + NumeroALetras(value % 1000);
        else if (value < 1000000)
        {
            num2Text = NumeroALetras(Math.Truncate(value / 1000)) + " MIL";
            if ((value % 1000) > 0)
            {
                num2Text = num2Text + " " + NumeroALetras(value % 1000);
            }
        }
        else if (value == 1000000)
        {
            num2Text = "UN MILLON";
        }
        else if (value < 2000000)
        {
            num2Text = "UN MILLON " + NumeroALetras(value % 1000000);
        }
        else if (value < 1000000000000)
        {
            num2Text = NumeroALetras(Math.Truncate(value / 1000000)) + " MILLONES ";
            if ((value - Math.Truncate(value / 1000000) * 1000000) > 0)
            {
                num2Text = num2Text + " " + NumeroALetras(value - Math.Truncate(value / 1000000) * 1000000);
            }
        }
        else if (value == 1000000000000) num2Text = "UN BILLON";
        else if (value < 2000000000000) num2Text = "UN BILLON " + NumeroALetras(value - Math.Truncate(value / 1000000000000) * 1000000000000);
        else
        {
            num2Text = NumeroALetras(Math.Truncate(value / 1000000000000)) + " BILLONES";
            if ((value - Math.Truncate(value / 1000000000000) * 1000000000000) > 0)
            {
                num2Text = num2Text + " " + NumeroALetras(value - Math.Truncate(value / 1000000000000) * 1000000000000);
            }
        }
        return num2Text;
    }
}

¿Cómo utilizar la clase para convertir números a letras?

El uso de la clase es muy sencillo. Haremos paso a paso la recreación de un proyecto tipo consola para que no te pierdas. La clase funciona para cualquier tipo de aplicación, ya sea una aplicación Windows Forms, WPF, Xamarin, ASP.NET, etcétera.

  1. Crea un proyecto en Visual Studio tipo Consola.
  2. Dentro del proyecto, crea una nueva clase llamada Conversores.
  3. Pega el código sustituyendo a partir de “public class Conversores”
  4. Declara una variable tipo decimal con el valor que quieras
  5. Imprime el resultado desde la consola, simplemente llamando el método “NumeroALetras”. El resultado queda de la siguiente forma
class Program
{
    static void Main(string[] args)
    {
        decimal demo = 128379273.23m;
        Console.WriteLine(demo.NumeroALetras());
    }
}

El resultado es el siguiente:

Ejemplo Número a Letras
Ejemplo Número a Letras

¡Saludos!

7 comentarios en “Convertir Números a Letras en C#”

  1. Hola, estaba viendo sobre numeros a letras, me di cuenta que el textbox que usas, tiene el $ y las , y el . . me pregunto si este textbox lo pone automatico y si es asi , puedes mandarme ese ejemplo, gracias de antemano

  2. hola amigo nesesito de tu alluda tengo q acer un projecto en visual estudio 2008 en la parte de web site es una aplicacion con sistema en c# y sql server 2008 pero en c# no se nada sera q me puedes alludar este es mi correo asdrub26@hotmail.com nesesito saver todo

  3. Hola! Discula como puedo ver el codigo de tu clase “NumeroALetras”, lo necesito y me arias un gran favor proporcionandomelo porfavor! Gracias!

Deja un comentario

Tu dirección de correo electrónico no será publicada.