c# - para - convertir numeros decimales a letras
convertir números en palabras C# (3)
Cuando tuve que resolver este problema, creé un diccionario de datos codificado para mapear entre los números y sus palabras asociadas. Por ejemplo, lo siguiente podría representar algunas entradas en el diccionario:
{1, "one"}
{2, "two"}
{30, "thirty"}
En realidad, solo tiene que preocuparse por mapear números en las posiciones 10 ^ 0 (1,2,3, etc.) y 10 ^ 1 (10,20,30) porque una vez que llega a 100, simplemente tiene que saber cuándo use palabras como cien, mil, millones, etc. en combinación con su mapa. Por ejemplo, cuando tienes un número como 3,240,123, obtienes: tres millones doscientos cuarenta mil ciento veintitrés .
Después de que construyas tu mapa, necesitas trabajar con cada dígito en tu número y descubrir la nomenclatura apropiada para ir con él.
Posible duplicado:
¿Cómo puedo convertir un número entero en su representación verbal?
¿Alguien puede darme un código de iniciador en el que podría trabajar para convertir los números en palabras?
Conversión de números a palabras (que van de -1000 a +1000) ejemplo: 1000 -> mil
Realmente necesita proporcionar más detalles sobre lo que quiere decir. ¿Te refieres a "palabras" o "cuerdas"?
Por ejemplo, si quiere convertir un número en una cadena, solo necesitará algo como esto:
int i = 123;
string text = i.ToString();
De hecho, incluso puedes hacer esto:
(123).ToString(); // u need to put number in parenthesis
e incluso
(123.5).ToString(); // this always trips me out
Sin embargo, si necesita convertir 123
en one hundred twenty three
, entonces necesita hacer más análisis sintáctico. Tendría que dividir el número en sus partes, como cientos, décimas, etc.
Puedes comenzar por obtener la longitud de la cuerda (para los ints) para averiguar dónde comenzar la avería. Por ejemplo, 123 tiene 3 dígitos, así que deja que N = 3 e i = 1. A continuación, comienzas dividiendo 123 entre 10 (Ni) o 100. Esto te da 1. Ahora sabes que la palabra comenzará con "uno" cien". Luego incremente i, reste ese número (100) y divida por 10 (Ni), o 10 - esto le da 2. Haga esto hasta N == i.
Espero que esto ayude. Realmente deberías editar tu pregunta.
public static string NumberToWords(int number)
{
if (number == 0)
return "zero";
if (number < 0)
return "minus " + NumberToWords(Math.Abs(number));
string words = "";
if ((number / 1000000) > 0)
{
words += NumberToWords(number / 1000000) + " million ";
number %= 1000000;
}
if ((number / 1000) > 0)
{
words += NumberToWords(number / 1000) + " thousand ";
number %= 1000;
}
if ((number / 100) > 0)
{
words += NumberToWords(number / 100) + " hundred ";
number %= 100;
}
if (number > 0)
{
if (words != "")
words += "and ";
var unitsMap = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
var tensMap = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
if (number < 20)
words += unitsMap[number];
else
{
words += tensMap[number / 10];
if ((number % 10) > 0)
words += "-" + unitsMap[number % 10];
}
}
return words;
}