Código para Convertir de Números a Letras

Es muy fácil decir que el número 123456.78 es lo mismo que "CIENTO VEINTITRÉS MIL CUATROCIENTOS CINCUENTA Y SEIS CON 78", pero para una computadora esto no es para nada fácil, principalmente porque como ya sabemos nuestra computadora trabaja con un grupo de 0's y 1's, por lo tanto nuestro lenguaje de programación actúa como un traductor universal, y para esto tenemos que saber cómo indicarle a nuestro lenguaje que traduzca la información.


Este código es realmente muy simple, y bastante viejo, incluso podemos encontrar distintas versiones del mismo código con algunas mejoras, algunos errores, y también podemos encontrarlo en varios lenguajes, pero como lo nuestro está dirigido principalmente a Visual Basic, así es como les presentaré el código:


''' <summary>
''' Función para convertir de números a letras.
''' </summary>
''' <param name="valor">Número de longitud Double.</param>
''' <returns>El número convertido en una cadena de texto.</returns>

Public Function NumerosALetras(ByVal valor As Double) As String

' Creamos una instrucción Select...Case

Select Case valor

' Para cada número escribimos su contraparte en letras
' que será devuelto al final de la función.

Case 0
NumerosALetras = "CERO"
Case 1
NumerosALetras = "UN"
Case 2
NumerosALetras = "DOS"
Case 3
NumerosALetras = "TRES"
Case 4
NumerosALetras = "CUATRO"
Case 5
NumerosALetras = "CINCO"
Case 6
NumerosALetras = "SEIS"
Case 7
NumerosALetras = "SIETE"
Case 8
NumerosALetras = "OCHO"
Case 9
NumerosALetras = "NUEVE"
Case 10
NumerosALetras = "DIEZ"
Case 11
NumerosALetras = "ONCE"
Case 12
NumerosALetras = "DOCE"
Case 13
NumerosALetras = "TRECE"
Case 14
NumerosALetras = "CATORCE"
Case Is < 20
NumerosALetras = "DIECI" & NumerosALetras(valor - 10)
Case 20
NumerosALetras = "VEINTE"
Case Is < 30
NumerosALetras = "VEINTI" & NumerosALetras(valor - 20)
Case 30
NumerosALetras = "TREINTA"
Case 40
NumerosALetras = "CUARENTA"
Case 50
NumerosALetras = "CINCUENTA"
Case 60
NumerosALetras = "SESENTA"
Case 70
NumerosALetras = "SETENTA"
Case 80
NumerosALetras = "OCHENTA"
Case 90
NumerosALetras = "NOVENTA"
Case Is < 100
NumerosALetras = NumerosALetras(Int(valor \ 10) * 10) & " Y " & NumerosALetras(valor Mod 10)
Case 100
NumerosALetras = "CIEN"
Case Is < 200
NumerosALetras = "CIENTO" & NumerosALetras(valor - 100)
Case 200, 300, 400, 600, 800
NumerosALetras = NumerosALetras(Int(valor \ 100)) & "CIENTOS"
Case 500
NumerosALetras = "QUINIENTOS"
Case 700
NumerosALetras = "SETECIENTOS"
Case 900
NumerosALetras = "NOVECIENTOS"
Case Is < 1000
NumerosALetras = NumerosALetras(Int(valor \ 100) * 100) & " " & NumerosALetras(valor Mod 100)
Case 1000
NumerosALetras = "MIL"
Case Is < 2000
NumerosALetras = "MIL" & NumerosALetras(valor Mod 1000)
Case Is < 1000000
NumerosALetras = NumerosALetras(Int(valor \ 1000)) & " MIL"
If valor Mod 1000 Then NumerosALetras = NumerosALetras & " " & NumerosALetras(valor Mod 1000)
Case 1000000
NumerosALetras = "UN MILLÓN"
Case Is < 2000000
NumerosALetras = "UN MILLÓN" & NumerosALetras(valor Mod 1000000)
Case Is < 1000000000000.0#
NumerosALetras = NumerosALetras(Int(valor / 1000000)) & " MILLONES" If (valor - Int(valor / 1000000) * 1000000) Then NumerosALetras = NumerosALetras & " " & _
NumerosALetras(valor - Int(valor / 1000000) * 1000000)
Case 1000000000000.0#
NumerosALetras = "UN BILLÓN"
Case Is < 2000000000000.0#
NumerosALetras = "UN BILLÓN" & NumerosALetras(valor - Int(valor / 1000000000000.0#) * 1000000000000.0#)
Case Else
NumerosALetras = NumerosALetras(Int(valor / 1000000000000.0#)) & " BILLONES"
If (valor - Int(valor / 1000000000000.0#) * 1000000000000.0#) Then NumerosALetras = NumerosALetras & _
" " & NumerosALetras(valor - Int(valor / 1000000000000.0#) * 1000000000000.0#)
End Select

' Devolvemos el valor de la conversión como una cadena de texto.

Return NumerosALetras
End Function

1 comentarios:

Anónimo dijo...

Muy buenas tardes ,resulto ser muy interesante su espacio y le felicito :), le agradeceria y a la vez seria muy
grato si podriamos realizar intercambio de enlaces. Nuestra pagina para que ustedes nos enlacen es http://www.easycreate.es/ titulo: Gestion inmobiliaria
y nuestra web para intercambios es http://www.easycreate.es/links.asp
Espero su respuesta, muchas gracias seo@easycreate.es