Numeros a Letras

25/11/2005 - 23:24 por Juan Carlos Arandaç | Informe spam
Buen dia

Perdon por el abuso, pero queria preguntar si alguien tiene una funcion para
pasar de numeros a letras como para utilizar en impresion de cheques o
facturas.

Gracias por su valiosa ayuda
 

Leer las respuestas

#1 Benton
26/11/2005 - 00:15 | Informe spam
Perdon por el abuso, pero queria preguntar si alguien tiene una funcion
para pasar de numeros a letras como para utilizar en impresion de cheques
o facturas.



Abajo posteo una que encontré en el grupo y la modifiqué para que no
imprimiera con letra los centavos y soportara dos tipos de moneda.

La uso así:

// El segundo parámetro dicta el tipo de moneda:
string ctdLetras = Letras.Convertir(1500.21,'P');

Saludos,

-Benton


using System;
using System.Text;

public class Letras
{
private readonly static string[] _numbersInWords = {
"uno",
"dos",
"tres",
"cuatro",
"cinco",
"seis",
"siete",
"ocho",
"nueve",
"diez",
"once",
"doce",
"trece",
"catorce",
"quince",
"dieciseis",
"diecisiete",
"dieciocho",
"diecinueve",
"veinte",
"veintiuno",
"veintidos",
"veintitres",
"veinticuatro",
"veinticinco",
"veintiseis",
"veintisiete",
"veintiocho",
"veintinueve",
"treinta",
"cuarenta",
"cincuenta",
"sesenta",
"setenta",
"ochenta",
"noventa",
"ciento",
"doscientos",
"trescientos",
"cuatrocientos",
"quinientos",
"seiscientos",
"setecientos",
"ochocientos",
"novecientos"};

private const string _oneMillionWord = "un millon";
private const string _millionsWord = "millones";
private const string _oneThousandWord = "un mil";
private const string _thousandWord = "mil";
private const string _hundredWord = "cien";
private const string _oneHundredWord = "ciento un";
private const string _andWord = "y";

/// <summary>

/// Convert numbers to words

/// </summary>

/// <param name="Number"></param>

/// <returns></returns>

public static string Convertir(object objNumero, char moneda)
{
decimal decNumero = Convert.ToDecimal(objNumero);

return Convertir(decNumero, moneda);
}

public static string Convertir(decimal Number, char moneda)
{
StringBuilder Words;
string FormattedNumberString;
int decimalSeparatorLocation;
int millions;
int thousands;
int hundreds;
int decimals;
int ActualNumber = 0;
int c;
int d;
int u;

Words = new StringBuilder();

FormattedNumberString = Number.ToString("000000000.00");

char DecimalSeparator =
Convert.ToChar((Convert.ToString(1.1)).Trim().Substring(1, 1));

decimalSeparatorLocation =
FormattedNumberString.IndexOf(DecimalSeparator);

millions = Convert.ToInt32(FormattedNumberString.Substring(0, 3));

thousands = Convert.ToInt32(FormattedNumberString.Substring(3, 3));

hundreds = Convert.ToInt32(FormattedNumberString.Substring(6, 3));

decimals =
Convert.ToInt32(FormattedNumberString.Substring(decimalSeparatorLocation +
1, 2));

for (int NumberPart = 1; NumberPart <= 4; NumberPart++)
{

switch (NumberPart)
{

case 1:
ActualNumber = millions;

if (millions == 1)
{
Words.Append(_oneMillionWord);
Words.Append(' ');
continue;
}
break;

case 2:

ActualNumber = thousands;

if (millions != 1 && millions != 0)
{

Words.Append(_millionsWord);

Words.Append(' ');

}

if (thousands == 1)
{
Words.Append(_oneThousandWord);

Words.Append(' ');

continue;
}
break;

case 3:
{
ActualNumber = hundreds;

if (thousands != 1 && thousands != 0)
{
Words.Append(_thousandWord);
Words.Append(' ');
}
break;
}

case 4:
{
ActualNumber = decimals;

Words.Append((moneda == 'P' ? "PESOS" : "DOLARES") + " " +
decimals.ToString() + "/100");
Words.Append(' ');
break;
}
}

// Agregué este "if" para que no ponga los centavos con letra
if (NumberPart < 4)
{
c = (int)(ActualNumber / 100);

d = (int)(ActualNumber - c * 100) / 10;

u = (int)(ActualNumber - (c * 100 + d * 10));

if (ActualNumber == 0) continue;

if (ActualNumber == 100)
{
Words.Append(_hundredWord);
Words.Append(' ');
continue;
}
else
{

if (ActualNumber == 101 && NumberPart != 3)
{
Words.Append(_oneHundredWord);
Words.Append(' ');
continue;
}

else
{
if (ActualNumber > 100)
{
Words.Append(_numbersInWords[c + 35]);
Words.Append(' ');
}
}
}

if (d < 3 && d != 0)
{

Words.Append(_numbersInWords[d * 10 + u - 1]);

Words.Append(' ');

}

else
{

if (d > 2)
{

Words.Append(_numbersInWords[d + 26]);

Words.Append(' ');

if (u == 0)
{

continue;

}

Words.Append(_andWord);

Words.Append(' ');

Words.Append(_numbersInWords[u - 1]);

Words.Append(' ');

}

else
{

if (d == 0 && u != 0)
{

Words.Append(_numbersInWords[u - 1]);

Words.Append(' ');

}
}
}
}
}

Words.Replace("uno mil", "un mil");

return Words.ToString().Trim().ToUpper();
}
}

Preguntas similares