C#. Convertir números a letra

Basado en una función que encontré en Internet (no recuerdo dónde :(), creé esta función de extensión para el tipo de dato int, para convertir de número a letra.

El un poco larga, por la misma complejidad de los números en idioma español.

La utilicé para un sistema que imprimía una vista previa de facturas, y tenía que convertir el monto total a texto. La función original es más completa, por la forma en que se tiene que escribir una cantidad de dinero en texto, pero con lo que se muestra aquí es suficiente para comprender la lógica del código.

public static string ToText(this int value) {
  string Num2Text = "";
  if (value < 0) return "menos " + Math.Abs(value).ToText();

  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" + (value - 10).ToText();
  else if (value == 20) Num2Text = "veinte";
  else if (value < 30) Num2Text = "veinti" + (value - 20).ToText();
  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)
  {
    int u = value % 10;
    Num2Text = string.Format("{0} y {1}", ((value / 10) * 10).ToText(), (u == 1 ? "un" : (value % 10).ToText()));
  }
  else if (value == 100) Num2Text = "cien";
  else if (value < 200) Num2Text = "ciento " + (value - 100).ToText();
  else if ((value == 200) || (value == 300) || (value == 400) || (value == 600) || (value == 800))
    Num2Text = ((value / 100)).ToText() + "cientos";
  else if (value == 500) Num2Text = "quinientos";
  else if (value == 700) Num2Text = "setecientos";
  else if (value == 900) Num2Text = "novecientos";
  else if (value < 1000) Num2Text = string.Format("{0} {1}", ((value / 100) * 100).ToText(), (value % 100).ToText());
  else if (value == 1000) Num2Text = "mil";
  else if (value < 2000) Num2Text = "mil " + (value % 1000).ToText();
  else if (value < 1000000)
  {
    Num2Text = ((value / 1000)).ToText() + " mil";
    if ((value % 1000) > 0) Num2Text += " " + (value % 1000).ToText();
  }
  else if (value == 1000000) Num2Text = "un millón";
  else if (value < 2000000) Num2Text = "un millón " + (value % 1000000).ToText();
  else if (value < int.MaxValue)
  {
    Num2Text = ((value / 1000000)).ToText() + " millones";
    if ((value - (value / 1000000) * 1000000) > 0) Num2Text += " " + (value - (value / 1000000) * 1000000).ToText();
  }
  return Num2Text;
}
Anuncios

Autor: Israel Muñoz

Soy desarrollador de software, principalmente dedicado a desarrollo de aplicaciones web. Especializado en .NET full-stack, además de tecnologías front-end HTML, CSS y JavaScript. A ratos, profesor de materias de informática. Me gusta mucho todo lo que tiene que ver con las tecnologías nuevas para desarrollo web, y el diseño de sitios y aplicaciones.

5 comentarios en “C#. Convertir números a letra”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s