Convertir de Numero a letras.

15/07/2005 - 02:01 por Jorge | Informe spam
Alguien tandra algun script en C# que transforme un numero con decimales a
letras.
por ejemplo: 1673.34 = Mil Seicientos Setenta y tres - 34/100

Encontre algunos en español pero no funcionan.
El que encontre en ingles sirve pero no entiendo bien la conversion y no lo
he podido adaptar a español.
 

Leer las respuestas

#1 Eugenio Serrano [MVP]
15/07/2005 - 04:27 | Informe spam
Te paso un realizado por mi..

Saludos,
Eugenio Serrano
NDSoft Consultoría y Desarrollo
Microsoft MVP (ASP.Net)
http://spaces.msn.com/members/eugenioserrano/
http://tinyurl.com/63ybf



public class Utility

{

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 _centWord = "centavo(s)";

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 _zeroWithWord = "cero con";

private const string _withWord = "con";

private const string _andWord = "y";

/// <summary>

/// Convert numbers to words

/// </summary>

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

/// <returns></returns>

public static string NumberToWords(decimal Number)

{

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;

if (decimals != 0)

{

if (millions

== 0 && thousands == 0 && hundreds == 0)

{


Words.Append(_zeroWithWord);


Words.Append(' ');

}

else

{


Words.Append(_withWord);


Words.Append(' ');

}

}

break;

}

}

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(' ');

}

}

}

}

if (decimals != 0)

{

Words.Append(_centWord);

}

// Resolve here particular problems.

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


return Words.ToString().Trim();

}

}






"Jorge" escribió en el mensaje
news:%237f%
Alguien tandra algun script en C# que transforme un numero con decimales a
letras.
por ejemplo: 1673.34 = Mil Seicientos Setenta y tres - 34/100

Encontre algunos en español pero no funcionan.
El que encontre en ingles sirve pero no entiendo bien la conversion y no
lo
he podido adaptar a español.


Preguntas similares