Imports System
Public Class NumeroATexto
' ---------------------------------------------------------------------------
' Devuelve la representación textual de un número ENTERO y demuestra la
' concisión de su código, gracias a las técnicas de recursión.
' ---------------------------------------------------------------------------
Public Shared Function NroATexto(ByVal n As Integer) As String
NroATexto = ""
' al llamar a esta Función, se pasa el parámetro "n" como Integer, de manera
' que si hay centavos, quedan allá, y en aquella función que llama a ésta,
' se extraen los centavos con Mid() y se lo agrega a la leyenda.
Try
Select Case n
Case 0
Return "Cero"
Case 1 To 29
Dim matriz() As String = {"Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", _
"Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", _
"Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", _
"Veintiuno", "Veintidós", "Veintitrés", "Veinticuatro", "Veinticinco", _
"Veintiséis", "Veintisiete", "Veintiocho", "Veintinueve"}
Return matriz(n - 1)
Case 30 To 99
Dim matriz() As String = {"Treinta", "Cuarenta", "Cincuenta", _
"Sesenta", "Setenta", "Ochenta", "Noventa"}
If n Mod 10 = 0 Then Return matriz(n \ 10 - 3)
Return matriz(n \ 10 - 3) & " y " & NroATexto(n Mod 10)
Case 100
Return "Cien"
Case 101 To 999
Dim matriz() As String = {"Ciento", "Doscientos", "Trescientos", "Cuatrocientos", _
"Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos"}
If n Mod 100 = 0 Then Return matriz(n \ 100 - 1)
Return matriz(n \ 100 - 1) & " " & NroATexto(n Mod 100)
Case 1000 To 1999
Return "Mil " & NroATexto(n Mod 1000)
Case 2000 To 999999
Return NroATexto(n \ 1000) & " Mil " & NroATexto(n Mod 1000)
Case 1000000 To 1999999
Return "Un Millón " & NroATexto(n Mod 1000000)
Case 1000000 To 999999999
Return NroATexto(n \ 1000000) & " Millones " & NroATexto(n Mod 1000000)
Case 1000000000 To 1999999999
Return "Mil Millones " & NroATexto(n Mod 1000000000)
Case Else
Return NroATexto(n \ 1000000000) & " Mil Millones " _
& NroATexto(n Mod 1000000000)
End Select
Catch ex As Exception
MessageBox.Show("Error N° " & Err.Number & NL & ex.Message, "Public Shared Function NroATexto()", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
' ---------------------------------------------------------------------------
' Mod (Operador, Visual Basic) = Divide dos números y devuelve sólo el resto.
' Tipos admitidos: Todos los tipos numéricos, incluidos los tipos de punto
' flotante sin signo y Decimal. (NOTA: Cuando trabaje con números en punto
' flotante, tenga presente que no siempre tienen una representación precisa
' en memoria. Esto podría producir que ciertas operaciones arrojaran resultados
' inesperados, como una comparación de valores y el operador Mod.)
' ---------------------------------------------------------------------------
' \ (Operador) = Divide dos números y devuelve un resultado de número entero.
' ---------------------------------------------------------------------------
' / (Operador, Visual Basic) = Divide dos números y devuelve un resultado de
' punto flotante.
' ---------------------------------------------------------------------------
' La función IEEERemainder devuelve el residuo de una operación de división,
' por lo tanto, es similar al operador Mod pero funciona con números de punto
' florante.
' ---------------------------------------------------------------------------
End Function
End Class