ayuda convertir numeros

Novato
18 de Septiembre del 2004
hola quisiera ver si alguien sabe como ayudarme, soy nuevo en esto de visual basic y quiero hacer un programa que al ingresar un numero me diga su equivalente a letra, estoy utilizando un textbox y un label, ya logre hacerlo hasta 3 cifras, pero tengo el problema que en el 11 me dice diez y uno, diez y cinco, veinte y dos, me explico, quisiera que me ayudaran a correjirlo, ahora bien cuando le meto mas de tres cifras es cuando ya no jala el programa, solo me pone el equivalente en miles y me borra lo demas, si alguien sabe como ayudarme le estoy muy agradecido.

Bartolom
18 de Septiembre del 2004
Supongo que el textbox es donde ingresas el númro y el label donde aparece transformado a palabras.

Haz lo siguente. Crea una función en tu form:

Function NumberToString(ByVal number As Double, ByVal masculino As Boolean) As String
' Si ponemos masculino = True en 200 pondrá -> doscientOs
' Si ponemos masculino = False en 200 pondrá -> doscientAs

If number = 0 Then
NumberToString = "Cero"
Exit Function
End If

If number < 0 Then ' Hacerlo positivo,
number = number * -1
End If

X = CStr(Fix(number)) ' ...entero,
Do While Len(X) < 9 ' ...y de 9 cifras.
X = "0" & X
Loop

a = ""
For n = 7 To 1 Step -3
' Ver si es cero
If CInt(Mid(X, n, 3)) <> 0 Then
Select Case CInt(Mid(X, n + 1, 2))
Case 10
a = "diez " & a
Case 11
a = "once " & a
Case 11
a = "once " & a
Case 12
a = "doce " & a
Case 13
a = "trece " & a
Case 14
a = "catorce " & a
Case 15
a = "quince " & a
Case 16
a = "dieciseis " & a
Case 17
a = "diecisiete " & a
Case 18
a = "dieciocho " & a
Case 19
a = "diecinueve " & a
Case 20
a = "veinte " & a
Case 21
If n > 1 Then
a = "veintiun$ " & a
Else
a = "veintiun " & a
End If
Case 22
a = "veintidos " & a
Case 23
a = "veintitrés " & a
Case 24
a = "veinticuatro " & a
Case 25
a = "veinticinco " & a
Case 26
a = "veintiseis " & a
Case 27
a = "veintisiete " & a
Case 28
a = "veintiocho " & a
Case 29
a = "veintinueve " & a
Case Else
'Otros casos
Select Case CInt(Mid(X, n + 2, 1))
Case 0
Case 1
Select Case n
Case 7
a = "y un$ " & a
Case 4
If masculino Then
a = "y un " & a
Else
a = "y una " & a
End If
Case 1
a = "y un " & a
End Select
Case 2
a = "y dos " & a
Case 3
a = "y tres " & a
Case 4
a = "y cuatro " & a
Case 5
a = "y cinco " & a
Case 6
a = "y seis " & a
Case 7
a = "y siete " & a
Case 8
a = "y ocho " & a
Case 9
a = "y nueve " & a
End Select
'Decenas
Select Case CInt(Mid(X, n + 1, 1))
Case 0
Case 3
a = "treinta " & a
Case 4
a = "cuarenta " & a
Case 5
a = "cincuenta " & a
Case 6
a = "sesenta " & a
Case 7
a = "setenta " & a
Case 8
a = "ochenta " & a
Case 9
a = "noventa " & a
End Select
End Select
If Left(a, 1) = "y" Then
a = Right(a, Len(a) - 2)
End If

'Centena
Select Case CInt(Mid(X, n, 1))
Case 0
Case 1
If CInt(Mid(X, n + 1, 2)) = 0 Then
a = "cien " & a
Else
a = "ciento " & a
End If
Case 2
a = "doscient$s " & a
Case 3
a = "trescient$s " & a
Case 4
a = "cuatrocient$s " & a
Case 5
a = "quinient$s " & a
Case 6
a = "seiscient$s " & a
Case 7
a = "setecient$s " & a
Case 8
a = "ochocient$s " & a
Case 9
a = "novecient$s " & a
End Select
End If

'Terminacion
If Left(a, 1) = "y" Then
a = Right(a, Len(a) - 2)
End If

' Millones
If n = 4 Then
If CInt(Left(X, 3)) = 1 Then
a = "millón " & a
Else
If CInt(Left(X, 3)) <> 0 Then
a = "millones " & a
End If
End If
Else
If n = 7 Then
' Miles
If CInt(Mid(X, 4, 3)) = 1 Then
a = "mil " & a
Else
If CInt(Mid(X, 4, 3)) <> 0 Then
a = "mil " & a
End If
End If
End If
End If

'Para millones siempre en masculino
If n = 1 Then
masculino = True
End If
Posic = 1
Do While Posic <> 0
Posic = InStr(a, "$")
If Posic <> 0 Then
ante = Left(a, Posic - 1)
post = Right(a, Len(a) - Posic)
If masculino Then
a = ante & "o" & post
Else
a = ante & "a" & post
End If
End If
Loop
Next n

' Caso especial
If Left(a, 7) = "un mil " Then
a = Right(a, Len(a) - 3)
Else
If Left(a, 8) = "una mil " Then
a = Right(a, Len(a) - 4)
End If
End If

' Inicial en mayúsculas
NumberToString = Trim(UCase(Left(a, 1)) & Right(a, Len(a) - 1))

End Function



Luego, en el mismo form, donde esté el textbox y el label haz lo siguiente:

Dim numero As Double
numero = Text1
Label1.Caption = NumberToString(Text1.Text, True)

Esta instrucción la puedes colocar en uin evento click de un botón o en el evento gotfocus del textbox, etc.

Sirve desde cero hasta mil millones, supongo que es suficiente.

Saludos!
Bartolom
Chile