El código que hice es el siguiente:
/////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NumLetras
{
/// <summary>
/// CLASE PARA CONVERTIR DE NUMEROS A LETRAS
/// AUNQUE POR EL MOMENTO SOLO CONVIERTE DE 0.00 HASTA 99999999.99
/// AUNQUE IGNORO SI ALGUIEN EN SUS PROYECTOS MANEJARÁ CANTIDADES SUPERIORES A LOS
/// CIEN MILLONES
/// :)
/// ESTA CLASE LA HICE EL MARTES 16 DE FEBRERO del 2010(PORQUE ME HACIA FALTA PARA UNA TAREA) :(
/// CUALQUIER ACLARACION, CORRECCION O MEJORA AL CODIGO FUENTE
/// ENVIAR CORREO A
/// bers_1987@hotmail.com
/// ESTARE AGRADECIDO POR SUS COMENTARIOS
/// PARA HACER USO PUS YA SABEN
/// DE ESTA FORMA
/// Console.WriteLine(new ConvierteNumLetras().ConvierteaLetras(99999999.99));
/// O DE LA FORMA QUE QUIERAN
/// </summary>
public class ConvierteNumLetras
{
string[] unidades = new string[]
{
"CERO",
"UN",
"DOS",
"TRES",
"CUATRO",
"CINCO",
"SEIS",
"SIETE",
"OCHO",
"NUEVE"
};
string[] decenas = new string[]
{
"DIE",
"ONCE",
"DOCE",
"TRECE",
"CATORCE",
"QUINCE",
"VEINT",
"TREINTA",
"CUARENTA",
"CINCUENTA",
"SESENTA",
"SETENTA",
"OCHENTA",
"NOVENTA"
};
string[] centenas = new string[]
{
"",
"CIEN",
"DOSCIENTOS",
"TRESCIENTOS",
"CUATROCIENTOS",
"QUINIENTOS",
"SEISCIENTOS",
"SETECIENTOS",
"OCHOCIENTOS",
"NOVECIENTOS"
};
/// <summary>
/// convierte un numero double a su correspondiente en letras
/// </summary>
/// <param name="cantidad">cantidad a convertir</param>
/// <returns>una cadena con la cantidad convertida</returns>
public string ConvierteaLetras(double cantidad)
{
double millon = 1000000;
double cienmiles = 100000;
double miles = 10000;
double mil = 1000;
string unidad = " PESO ";
string letras = "";
string[] decim = cantidad.ToString().Split(new char[] { '.' });
string decimales = "00/100 M.N";
if (decim.Length > 1)
{
decimales = decim[1].PadRight(2, '0') + "/100 M.N";
}
cantidad = double.Parse(cantidad.ToString().Split(new char[] { '.' })[0]);
if (cantidad <= 0)//si cantidad es igual o menor a cero
{
letras = "CERO";
}
if (cantidad>1)//es un peso
{
unidad=" PESOS ";
}
//INICIA
if ((cantidad / millon) >= 1)//con los millones
{
int indice = (int)(cantidad / millon);//el (int) es un cast, ya que el resultado de dividir cantidad/millon me daria un double asi que le hago el cast a int
if (indice <= 9)//menos de 10 millones
{
if (indice > 1)
{
letras = unidades[indice] + " MILLONES";
}
else
{
letras = unidades[indice] + " MILLON";
}
}
if (indice >= 10 && indice <= 15)//igual o mayor de 10 pero menor o igual de 15
{
if (indice == 10)
{
letras = decenas[indice % 10] + "Z MILLONES";
}
else
{
letras = decenas[indice % 10] + " MILLONES";
}
}
if (indice >= 16 && indice <= 19) // de 16-19 millones
{
letras = decenas[0] + "CI " + unidades[indice % 10] + " MILLONES";
}
if (indice >= 20 && indice <= 99)//mas de 20 millones pero menos de 99
{
if (indice > 20 && indice < 30)//por si es 21-29
{
if ((indice % 10) == 0)
{
letras = decenas[(indice / 10) + 4] + " E MILLONES";
}
else
{
letras = decenas[(indice / 10) + 4] + "I Y " + unidades[indice % 10] + " MILLONES";
}
}
else
if ((indice % 10) > 0)//para saber si poner el "Y" a la cadena ejemplo 99 seria noventa Y nueve
{
letras = decenas[(indice / 10) + 4] + " Y " + unidades[indice % 10] + " MILLONES";
}
else//en esta caso seria 90
{
letras = decenas[indice / 10 + 4] + " MILLONES";
}
}
cantidad = cantidad % millon;//termino con los millones ahora quedan los cienmiles
}
if ((cantidad / cienmiles) >= 1)//los cien miles
{
int indice = (int)(cantidad / cienmiles);
if (indice >= 1)//si tiene cienmiles, si es 999,999 se salta al siguiente if
{
letras += " " + centenas[indice];
}
cantidad = cantidad % cienmiles;
if (cantidad == 0)//solo es cien pongo el mil
{
letras += " MIL";
}
}
if ((cantidad / miles) >= 1)//los diez miles
{
int indice = (int)(cantidad / miles);
if (indice > 1)//mayor de 20 mil, aqui solo pongo los miles
{
letras += " " + decenas[indice + 4];
}
if ((indice == 2) && (cantidad % miles) == 0)//si da 20 seria veinte
{
letras += "E";
}
else if (indice == 2)//caso contrario seria veinti
{
letras += "I";
}
if (indice > 1)//ya tengo puesto los miles le pongo sus unidades
{
letras += " Y " + unidades[(int)(cantidad % miles) / 1000] + " MIL";
}
if ((cantidad / mil) >= 10 && (cantidad / mil) <= 19)//si esta entre 11-15
{
indice = (int)(cantidad / mil);
if (indice == 10)//igual a 10 mil
{
letras += " " + decenas[0] + "Z MIL";
}
if (indice > 10 && indice < 16)//entre 11 y 15 mil
{
letras += " " + decenas[(indice % 10)] + " MIL";
}
if (indice > 15)//mayor de 15 mil
{
letras += " " + decenas[(indice / 10) - 1] + "CI" + unidades[indice % 10] + " MIL";
}
}
cantidad = cantidad % mil;
}
//else if ((cantidad>0)&&((cantidad % 100000) == 0))//si solo es por ejemplo 900000
//{
// letras += " MIL";
//}
//si no llega a diez mil
//por ejemplo 9999
//este error lo encontre de pura cagada
//cuando probaba el codigo
if ((cantidad / 1000) >= 1)//los miles
{
int indice = (int)(cantidad / 1000);
letras += " " + unidades[indice] + " MIL";
cantidad = cantidad % 1000;
}
if ((cantidad / 100) >= 1 || (cantidad / 10) >= 1 || (cantidad / 1) >= 1)//y por ultimo la colita, las centenas, decenas o unidades
{
int indice = (int)(cantidad / 100);
if (indice >= 1)//tiene centenas 100
{
if (indice == 1 && (cantidad % 100) > 0)//si es 110 seria cien + to
{
letras += " " + centenas[indice] + "TO";
}
else
{
letras += " " + centenas[indice];
}
}
cantidad = cantidad % 100;//las decenas
if (cantidad < 10 && cantidad > 0)//del 1-9
{
if (cantidad > 1)//del 2-9
{
letras += " " + unidades[(int)cantidad];
}
else//es uno, le pongo la o al final para que sea "uno"
{
letras += " " + unidades[(int)cantidad];
}
}
if (cantidad >= 10 && cantidad <= 15)//del 10-15
{
if (cantidad == 10)
{
letras += " " + decenas[(int)(cantidad % 10)] + "Z";
}
else
{
letras += " " + decenas[(int)(cantidad % 10)];
}
}
if (cantidad >= 16)//del 16-99
{
if ((int)(cantidad / 10) == 1)//del del 16-20
{
letras += " " + decenas[0] + "CI" + unidades[(int)(cantidad % 10)];
}
else if ((int)(cantidad / 10) > 1) //del 20 en adelante
{
if ((int)(cantidad / 10) == 2)
{
if ((cantidad % 10) > 0)
{
letras += " " + decenas[(int)(cantidad / 10) + 4] + "I" + unidades[(int)(cantidad % 10)];
}
else
{
letras += " " + decenas[(int)(cantidad / 10) + 4] + "E";
}
}
else
{
if ((cantidad % 10) > 0)
{
letras += " " + decenas[(int)(cantidad / 10) + 4] + " Y " + unidades[(int)(cantidad % 10)];
}
else
{
letras += " " + decenas[(int)(cantidad / 10) + 4];
}
}
}
}
}
return letras.Trim() + unidad + decimales;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NumLetras
{
/// <summary>
/// CLASE PARA CONVERTIR DE NUMEROS A LETRAS
/// AUNQUE POR EL MOMENTO SOLO CONVIERTE DE 0.00 HASTA 99999999.99
/// AUNQUE IGNORO SI ALGUIEN EN SUS PROYECTOS MANEJARÁ CANTIDADES SUPERIORES A LOS
/// CIEN MILLONES
/// :)
/// ESTA CLASE LA HICE EL MARTES 16 DE FEBRERO del 2010(PORQUE ME HACIA FALTA PARA UNA TAREA) :(
/// CUALQUIER ACLARACION, CORRECCION O MEJORA AL CODIGO FUENTE
/// ENVIAR CORREO A
/// bers_1987@hotmail.com
/// ESTARE AGRADECIDO POR SUS COMENTARIOS
/// PARA HACER USO PUS YA SABEN
/// DE ESTA FORMA
/// Console.WriteLine(new ConvierteNumLetras().ConvierteaLetras(99999999.99));
/// O DE LA FORMA QUE QUIERAN
/// </summary>
public class ConvierteNumLetras
{
string[] unidades = new string[]
{
"CERO",
"UN",
"DOS",
"TRES",
"CUATRO",
"CINCO",
"SEIS",
"SIETE",
"OCHO",
"NUEVE"
};
string[] decenas = new string[]
{
"DIE",
"ONCE",
"DOCE",
"TRECE",
"CATORCE",
"QUINCE",
"VEINT",
"TREINTA",
"CUARENTA",
"CINCUENTA",
"SESENTA",
"SETENTA",
"OCHENTA",
"NOVENTA"
};
string[] centenas = new string[]
{
"",
"CIEN",
"DOSCIENTOS",
"TRESCIENTOS",
"CUATROCIENTOS",
"QUINIENTOS",
"SEISCIENTOS",
"SETECIENTOS",
"OCHOCIENTOS",
"NOVECIENTOS"
};
/// <summary>
/// convierte un numero double a su correspondiente en letras
/// </summary>
/// <param name="cantidad">cantidad a convertir</param>
/// <returns>una cadena con la cantidad convertida</returns>
public string ConvierteaLetras(double cantidad)
{
double millon = 1000000;
double cienmiles = 100000;
double miles = 10000;
double mil = 1000;
string unidad = " PESO ";
string letras = "";
string[] decim = cantidad.ToString().Split(new char[] { '.' });
string decimales = "00/100 M.N";
if (decim.Length > 1)
{
decimales = decim[1].PadRight(2, '0') + "/100 M.N";
}
cantidad = double.Parse(cantidad.ToString().Split(new char[] { '.' })[0]);
if (cantidad <= 0)//si cantidad es igual o menor a cero
{
letras = "CERO";
}
if (cantidad>1)//es un peso
{
unidad=" PESOS ";
}
//INICIA
if ((cantidad / millon) >= 1)//con los millones
{
int indice = (int)(cantidad / millon);//el (int) es un cast, ya que el resultado de dividir cantidad/millon me daria un double asi que le hago el cast a int
if (indice <= 9)//menos de 10 millones
{
if (indice > 1)
{
letras = unidades[indice] + " MILLONES";
}
else
{
letras = unidades[indice] + " MILLON";
}
}
if (indice >= 10 && indice <= 15)//igual o mayor de 10 pero menor o igual de 15
{
if (indice == 10)
{
letras = decenas[indice % 10] + "Z MILLONES";
}
else
{
letras = decenas[indice % 10] + " MILLONES";
}
}
if (indice >= 16 && indice <= 19) // de 16-19 millones
{
letras = decenas[0] + "CI " + unidades[indice % 10] + " MILLONES";
}
if (indice >= 20 && indice <= 99)//mas de 20 millones pero menos de 99
{
if (indice > 20 && indice < 30)//por si es 21-29
{
if ((indice % 10) == 0)
{
letras = decenas[(indice / 10) + 4] + " E MILLONES";
}
else
{
letras = decenas[(indice / 10) + 4] + "I Y " + unidades[indice % 10] + " MILLONES";
}
}
else
if ((indice % 10) > 0)//para saber si poner el "Y" a la cadena ejemplo 99 seria noventa Y nueve
{
letras = decenas[(indice / 10) + 4] + " Y " + unidades[indice % 10] + " MILLONES";
}
else//en esta caso seria 90
{
letras = decenas[indice / 10 + 4] + " MILLONES";
}
}
cantidad = cantidad % millon;//termino con los millones ahora quedan los cienmiles
}
if ((cantidad / cienmiles) >= 1)//los cien miles
{
int indice = (int)(cantidad / cienmiles);
if (indice >= 1)//si tiene cienmiles, si es 999,999 se salta al siguiente if
{
letras += " " + centenas[indice];
}
cantidad = cantidad % cienmiles;
if (cantidad == 0)//solo es cien pongo el mil
{
letras += " MIL";
}
}
if ((cantidad / miles) >= 1)//los diez miles
{
int indice = (int)(cantidad / miles);
if (indice > 1)//mayor de 20 mil, aqui solo pongo los miles
{
letras += " " + decenas[indice + 4];
}
if ((indice == 2) && (cantidad % miles) == 0)//si da 20 seria veinte
{
letras += "E";
}
else if (indice == 2)//caso contrario seria veinti
{
letras += "I";
}
if (indice > 1)//ya tengo puesto los miles le pongo sus unidades
{
letras += " Y " + unidades[(int)(cantidad % miles) / 1000] + " MIL";
}
if ((cantidad / mil) >= 10 && (cantidad / mil) <= 19)//si esta entre 11-15
{
indice = (int)(cantidad / mil);
if (indice == 10)//igual a 10 mil
{
letras += " " + decenas[0] + "Z MIL";
}
if (indice > 10 && indice < 16)//entre 11 y 15 mil
{
letras += " " + decenas[(indice % 10)] + " MIL";
}
if (indice > 15)//mayor de 15 mil
{
letras += " " + decenas[(indice / 10) - 1] + "CI" + unidades[indice % 10] + " MIL";
}
}
cantidad = cantidad % mil;
}
//else if ((cantidad>0)&&((cantidad % 100000) == 0))//si solo es por ejemplo 900000
//{
// letras += " MIL";
//}
//si no llega a diez mil
//por ejemplo 9999
//este error lo encontre de pura cagada
//cuando probaba el codigo
if ((cantidad / 1000) >= 1)//los miles
{
int indice = (int)(cantidad / 1000);
letras += " " + unidades[indice] + " MIL";
cantidad = cantidad % 1000;
}
if ((cantidad / 100) >= 1 || (cantidad / 10) >= 1 || (cantidad / 1) >= 1)//y por ultimo la colita, las centenas, decenas o unidades
{
int indice = (int)(cantidad / 100);
if (indice >= 1)//tiene centenas 100
{
if (indice == 1 && (cantidad % 100) > 0)//si es 110 seria cien + to
{
letras += " " + centenas[indice] + "TO";
}
else
{
letras += " " + centenas[indice];
}
}
cantidad = cantidad % 100;//las decenas
if (cantidad < 10 && cantidad > 0)//del 1-9
{
if (cantidad > 1)//del 2-9
{
letras += " " + unidades[(int)cantidad];
}
else//es uno, le pongo la o al final para que sea "uno"
{
letras += " " + unidades[(int)cantidad];
}
}
if (cantidad >= 10 && cantidad <= 15)//del 10-15
{
if (cantidad == 10)
{
letras += " " + decenas[(int)(cantidad % 10)] + "Z";
}
else
{
letras += " " + decenas[(int)(cantidad % 10)];
}
}
if (cantidad >= 16)//del 16-99
{
if ((int)(cantidad / 10) == 1)//del del 16-20
{
letras += " " + decenas[0] + "CI" + unidades[(int)(cantidad % 10)];
}
else if ((int)(cantidad / 10) > 1) //del 20 en adelante
{
if ((int)(cantidad / 10) == 2)
{
if ((cantidad % 10) > 0)
{
letras += " " + decenas[(int)(cantidad / 10) + 4] + "I" + unidades[(int)(cantidad % 10)];
}
else
{
letras += " " + decenas[(int)(cantidad / 10) + 4] + "E";
}
}
else
{
if ((cantidad % 10) > 0)
{
letras += " " + decenas[(int)(cantidad / 10) + 4] + " Y " + unidades[(int)(cantidad % 10)];
}
else
{
letras += " " + decenas[(int)(cantidad / 10) + 4];
}
}
}
}
}
return letras.Trim() + unidad + decimales;
}
}
}
////////////////////////////////////////////////////////////////
Si tienen alguna mejora(que estoy seguro que la hay), no duden en comentarla....os agradeceria...
Hey que puedo hacer cuando me tira el error del:
ResponderEliminar"Error 1 The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?) C:\Users\Victor Corpeño\Documents\Visual Studio 2005\Projects\ConsoleApplication6\ConsoleApplication6\Program.cs 3 14 ConsoleApplication6
" Que proviene de esto : using System.Linq;
Que puedo hacer??
no soy un experto aun y necesito ayuda por favor!
Aquí una librería gratuita que hace todo esto y mas!!! Here is a free library that does all this and more !!!
ResponderEliminarhttp://urysoft.blogspot.com.es/p/urysoftutilities.html?view=sidebar