numlet

05/12/2003 - 23:31 por matias | Informe spam
HOLA ALGUIEN ME PUDE AYUDAR
LO QUE SE DESEA HACER ES CONVERTIR NUMEROS A TEXTO EJEMPLO $1234.56 (UN MIL DOSCIENTOS TREINTA Y CUATRO PESOS 56/100
SI ALGUIEN SABE COMO PORFAVOR AVISEME ES MUY IMPORTANTE GRACIAS

Preguntas similare

Leer las respuestas

#1 Marco Escobar
06/12/2003 - 01:54 | Informe spam
Matías

Jesus Peralta respondió anteriormente tu pregunta de esta forma que te
puede ayudar.

Un trabajo de Jesus Peralta

Sdos


Public Function NumLetras(ByVal Numero As Double, ByVal
Mayusculas As Integer) As String

Dim NumTmp As String
Dim c01 As Integer
Dim c02 As Integer
Dim pos As Integer
Dim dig As Integer
Dim cen As Integer
Dim dec As Integer
Dim uni As Integer
Dim letra1 As String
Dim letra2 As String
Dim letra3 As String
Dim Leyenda As String
Dim Leyenda1 As String
Dim TFNumero As String

If Numero < 0 Then Numero = Abs(Numero)

NumTmp = Format(Numero, "000000000000000.00") 'Le
da un formato fijo
c01 = 1
pos = 1
TFNumero = "Son:"
'Para extraer tres digitos cada vez
Do While c01 <= 5
c02 = 1
Do While c02 <= 3
'Extrae un digito cada vez de izquierda a derecha
dig = Val(Mid(NumTmp, pos, 1))
Select Case c02
Case 1: cen = dig
Case 2: dec = dig
Case 3: uni = dig
End Select
c02 = c02 + 1
pos = pos + 1
Loop
letra3 = Centena(uni, dec, cen)
letra2 = Decena(uni, dec)
letra1 = Unidad(uni, dec)

Select Case c01
Case 1
If cen + dec + uni = 1 Then
Leyenda = "Billon "
ElseIf cen + dec + uni > 1 Then
Leyenda = "Billones "
End If
Case 2
If cen + dec + uni >= 1 And Val(Mid(NumTmp, 7, 3))
= 0 Then
Leyenda = "Mil Millones "
ElseIf cen + dec + uni >= 1 Then
Leyenda = "Mil "
End If
Case 3
If cen + dec = 0 And uni = 1 Then
Leyenda = "Millon "
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then
Leyenda = "Millones "
End If
Case 4
If cen + dec + uni >= 1 Then
Leyenda = "Mil "
End If
Case 5
If cen + dec + uni >= 1 Then
Leyenda = ""
End If
End Select

c01 = c01 + 1

TFNumero = TFNumero + letra3 + letra2 + letra1 +
Leyenda

Leyenda = ""
letra1 = ""
letra2 = ""
letra3 = ""

Loop

If Val(NumTmp) = 0 Or Val(NumTmp) < 1 Then
Leyenda1 = "Cero Pesos "
ElseIf Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then
Leyenda1 = "Peso "
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid(NumTmp,
10, 6)) = 0 Then
Leyenda1 = "de Pesos "
Else
Leyenda1 = "Pesos "
End If

TFNumero = "(" & TFNumero & Leyenda1 & Mid(NumTmp, 17)
& "/100 M.N.)"

If Mayusculas = 1 Then
TFNumero = UCase(TFNumero)
Else
TFNumero = LCase(TFNumero)
End If

NumLetras = TFNumero

End Function


Private Function Centena(ByVal uni As Integer, ByVal dec
As Integer, ByVal cen As Integer) As String

Select Case cen
Case 1
If dec + uni = 0 Then
cTexto = "cien "
Else
cTexto = "ciento "
End If
Case 2: cTexto = "doscientos "
Case 3: cTexto = "trescientos "
Case 4: cTexto = "cuatrocientos "
Case 5: cTexto = "quinientos "
Case 6: cTexto = "seiscientos "
Case 7: cTexto = "setecientos "
Case 8: cTexto = "ochocientos "
Case 9: cTexto = "novecientos "
Case Else: cTexto = ""
End Select

Centena = cTexto
cTexto = ""

End Function


Private Function Decena(ByVal uni As Integer, ByVal dec As
Integer) As String

Select Case dec
Case 1
Select Case uni
Case 0: cTexto = "diez "
Case 1: cTexto = "once "
Case 2: cTexto = "doce "
Case 3: cTexto = "trece "
Case 4: cTexto = "catorce "
Case 5: cTexto = "quince "
Case 6 To 9: cTexto = "dieci"
End Select
Case 2
If uni = 0 Then
cTexto = "veinte "
ElseIf uni > 0 Then
cTexto = "veinti"
End If
Case 3: cTexto = "treinta "
Case 4: cTexto = "cuarenta "
Case 5: cTexto = "cincuenta "
Case 6: cTexto = "sesenta "
Case 7: cTexto = "setenta "
Case 8: cTexto = "ochenta "
Case 9: cTexto = "noventa "
Case Else: cTexto = ""
End Select

If uni > 0 And dec > 2 Then cTexto = cTexto + "y "

Decena = cTexto
cTexto = ""

End Function


Private Function Unidad(ByVal uni As Integer, ByVal dec As
Integer) As String

If dec <> 1 Then
Select Case uni
Case 1: cTexto = "un "
Case 2: cTexto = "dos "
Case 3: cTexto = "tres "
Case 4: cTexto = "cuatro "
Case 5: cTexto = "cinco "
End Select
End If

Select Case uni
Case 6: cTexto = "seis "
Case 7: cTexto = "siete "
Case 8: cTexto = "ocho "
Case 9: cTexto = "nueve "
End Select

Unidad = cTexto
cTexto = ""

End Function


"matias" wrote in message
news:
HOLA ALGUIEN ME PUDE AYUDAR
LO QUE SE DESEA HACER ES CONVERTIR NUMEROS A TEXTO EJEMPLO $1234.56 (UN


MIL DOSCIENTOS TREINTA Y CUATRO PESOS 56/100)
SI ALGUIEN SABE COMO PORFAVOR AVISEME ES MUY IMPORTANTE GRACIAS
Respuesta Responder a este mensaje
#2 Héctor Miguel
06/12/2003 - 09:58 | Informe spam
¿que tal, chicos? => solo comentarios tratando de 'aportar simplicidad' <
Un trabajo de Jesus Peralta [...]



[me parece que] Jesus 'adapto' [recortando] un algoritmo que [no hace mucho] publico Mauricio Baeza...
[autor original en co-participacion con Samuel Monjaras].
'sin embargo'... en la adaptacion [recorte] 'se perdio' [alguna] 'funcionalidad' :((
aunque 'sucede' con varios mas, 'prueba' con 10 o 100 'billones' [1 'con' 13 o 14 ceros =>por 'hacerlo facil'<=]
ademas de que 'estamos hablando' de +/- 160 lineas de codigo [ya 'sin paja'] como para 'buscar, encontrar y corregir'

el algoritmo que expongo al final, lo 'capte' de este foro publicado por Claudio Sepulveda ['bastante' tiempo ha]...
[aunque no estoy seguro de su autoria]... tiene menos 'errores' y SON TAN SOLO 65 lineas de codigo
es de los mas 'sencillos' y faciles de 'adaptar' que me ha tocado conocer por estos 'lares' :))
puedes 'personalizar' para [practicamente] CUALQUIER 'necesidad' en las primeras 12 lineas.
[solo monedas del 'genero' masculino... 'trabajar' con el genero femenino requiere 'quemar' unas cuantas neuronas mas]

existen otros diversos algoritmos [desde 'sencillos' hasta 'complejos'] para otras tambien diversas 'necesidades'...
de estos dos ejemplos... 'corre pruebas'... 'analiza'... 'compara'... 'decide'.

saludos,
hector.
_______
Function EnLetras(Valor) As String ' Función Principal '
If Not IsNumeric(Valor) Then
EnLetras = "¡ La referencia no es valor o... 'excede' la precisión !!!": Exit Function
End If: Dim Moneda As String, Fracs As String, Cents As Integer
If Int(Abs(Valor)) = 1 Then Moneda = " peso" Else Moneda = " pesos"
If Right(Letras(Abs(Valor)), 6) = "illón " Or Right(Letras(Abs(Valor)), 8) = "illones " Then Moneda = "de" & Moneda
Cents = Application.Round(Abs(Valor) - Int(Abs(Valor)), 2) * 100
If Cents = 1 Then Fracs = " centavo" Else Fracs = " centavos"
If Cents = 0 Then Fracs = "" Else Fracs = " con " & Letras(Cents) & Fracs
EnLetras = "(" & Letras(Abs(Valor)) & Moneda & Fracs & ")"
If Valor < 0 Then EnLetras = "menos " & EnLetras
End Function
Private Function Letras(Valor) As String ' Función Auxiliar [uso 'exclusivo' de la función 'principal'] '
Select Case Int(Valor)
Case 0: Letras = "cero"
Case 1: Letras = "un"
Case 2: Letras = "dos"
Case 3: Letras = "tres"
Case 4: Letras = "cuatro"
Case 5: Letras = "cinco"
Case 6: Letras = "seis"
Case 7: Letras = "siete"
Case 8: Letras = "ocho"
Case 9: Letras = "nueve"
Case 10: Letras = "diez"
Case 11: Letras = "once"
Case 12: Letras = "doce"
Case 13: Letras = "trece"
Case 14: Letras = "catorce"
Case 15: Letras = "quince"
Case Is < 20: Letras = "dieci" & Letras(Valor - 10)
Case 20: Letras = "veinte"
Case Is < 30: Letras = "veinti" & Letras(Valor - 20)
Case 30: Letras = "treinta"
Case 40: Letras = "cuarenta"
Case 50: Letras = "cincuenta"
Case 60: Letras = "sesenta"
Case 70: Letras = "setenta"
Case 80: Letras = "ochenta"
Case 90: Letras = "noventa"
Case Is < 100: Letras = Letras(Int(Valor \ 10) * 10) & " y " & Letras(Valor Mod 10)
Case 100: Letras = "cien"
Case Is < 200: Letras = "ciento " & Letras(Valor - 100)
Case 200, 300, 400, 600, 800: Letras = Letras(Int(Valor \ 100)) & "cientos"
Case 500: Letras = "quinientos"
Case 700: Letras = "setecientos"
Case 900: Letras = "novecientos"
Case Is < 1000: Letras = Letras(Int(Valor \ 100) * 100) & " " & Letras(Valor Mod 100)
Case 1000: Letras = "mil"
Case Is < 2000: Letras = "mil " & Letras(Valor Mod 1000)
Case Is < 1000000: Letras = Letras(Int(Valor \ 1000)) & " mil"
If Valor Mod 1000 Then Letras = Letras & " " & Letras(Valor Mod 1000)
Case 1000000: Letras = "un millón "
Case Is < 2000000: Letras = "un millón " & Letras(Valor Mod 1000000)
Case Is < 1000000000000#: Letras = Letras(Int(Valor / 1000000)) & " millones "
If (Valor - Int(Valor / 1000000) * 1000000) _
Then Letras = Letras & Letras(Valor - Int(Valor / 1000000) * 1000000)
Case 1000000000000#: Letras = "un billón "
Case Is < 2000000000000#
Letras = "un billón " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
Case Else: Letras = Letras(Int(Valor / 1000000000000#)) & " billones "
If (Valor - Int(Valor / 1000000000000#) * 1000000000000#) _
Then Letras = Letras & " " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
End Select
End Function
Respuesta Responder a este mensaje
#3 Zapata
08/12/2003 - 21:53 | Informe spam
hola amigos:


llevado por mi curiosidad, me he bajado esta funcion y
despues de tratear un rato he descubierto que no
funcionaba del todo bien ya que la funcion Int() cuando
los numeros son negativos y con decimales, si el decimal
pasa de 0,5 redondea al numero inferior y esto provoca un
error ya que no es este el numero que estamos tratando
sino el superior.
ademas detecté tambien que los numeros 35, 45, 55, 55,65,
75, 85 y 95 si tienen decimales y estos superan el 0.5
tambien daba este error.
de modo que le he aplicado una pequeña correcion a la
funcion auxiliar
espero no haber metido la pata..
un saludo
_______
Function EnLetras(Valor) As String ' Función Principal '
If Not IsNumeric(Valor) Then
EnLetras = "¡ La referencia no es valor o... 'excede'


la precisión !!!": Exit Function
End If: Dim Moneda As String, Fracs As String, Cents As


Integer
If Int(Abs(Valor)) = 1 Then Moneda = " peso" Else


Moneda = " pesos"
If Right(Letras(Abs(Valor)), 6) = "illón " Or Right


(Letras(Abs(Valor)), 8) = "illones " Then Moneda = "de" &
Moneda
Cents = Application.Round(Abs(Valor) - Int(Abs(Valor)),


2) * 100
If Cents = 1 Then Fracs = " centavo" Else Fracs = "


centavos"
If Cents = 0 Then Fracs = "" Else Fracs = " con " &


Letras(Cents) & Fracs
EnLetras = "(" & Letras(Abs(Valor)) & Moneda & Fracs


& ")"
If Valor < 0 Then EnLetras = "menos " & EnLetras
End Function
Private Function Letras(Valor) As String ' Función


Auxiliar [uso 'exclusivo' de la función 'principal'] '
'las dos siguientes lineas estan modificadas...
Valor = Int(Valor)
Select Case Valor
Case 0: Letras = "cero"
Case 1: Letras = "un"
Case 2: Letras = "dos"
Case 3: Letras = "tres"
Case 4: Letras = "cuatro"
Case 5: Letras = "cinco"
Case 6: Letras = "seis"
Case 7: Letras = "siete"
Case 8: Letras = "ocho"
Case 9: Letras = "nueve"
Case 10: Letras = "diez"
Case 11: Letras = "once"
Case 12: Letras = "doce"
Case 13: Letras = "trece"
Case 14: Letras = "catorce"
Case 15: Letras = "quince"
Case Is < 20: Letras = "dieci" & Letras(Valor - 10)
Case 20: Letras = "veinte"
Case Is < 30: Letras = "veinti" & Letras(Valor - 20)
Case 30: Letras = "treinta"
Case 40: Letras = "cuarenta"
Case 50: Letras = "cincuenta"
Case 60: Letras = "sesenta"
Case 70: Letras = "setenta"
Case 80: Letras = "ochenta"
Case 90: Letras = "noventa"
Case Is < 100: Letras = Letras(Int(Valor \ 10) * 10)


& " y " & Letras(Valor Mod 10)
Case 100: Letras = "cien"
Case Is < 200: Letras = "ciento " & Letras(Valor -


100)
Case 200, 300, 400, 600, 800: Letras = Letras(Int


(Valor \ 100)) & "cientos"
Case 500: Letras = "quinientos"
Case 700: Letras = "setecientos"
Case 900: Letras = "novecientos"
Case Is < 1000: Letras = Letras(Int(Valor \ 100) *


100) & " " & Letras(Valor Mod 100)
Case 1000: Letras = "mil"
Case Is < 2000: Letras = "mil " & Letras(Valor Mod


1000)
Case Is < 1000000: Letras = Letras(Int(Valor \ 1000))


& " mil"
If Valor Mod 1000 Then Letras = Letras & " " &


Letras(Valor Mod 1000)
Case 1000000: Letras = "un millón "
Case Is < 2000000: Letras = "un millón " & Letras


(Valor Mod 1000000)
Case Is < 1000000000000#: Letras = Letras(Int(Valor /


1000000)) & " millones "
If (Valor - Int(Valor / 1000000) * 1000000) _
Then Letras = Letras & Letras(Valor - Int(Valor /


1000000) * 1000000)
Case 1000000000000#: Letras = "un billón "
Case Is < 2000000000000#
Letras = "un billón " & Letras(Valor - Int(Valor /


1000000000000#) * 1000000000000#)
Case Else: Letras = Letras(Int(Valor /


1000000000000#)) & " billones "
If (Valor - Int(Valor / 1000000000000#) *


1000000000000#) _
Then Letras = Letras & " " & Letras(Valor - Int


(Valor / 1000000000000#) * 1000000000000#)
End Select
End Function


.

Respuesta Responder a este mensaje
#4 Héctor Miguel
08/12/2003 - 22:53 | Informe spam
hola, Zapata !

... he descubierto que ... que la funcion Int() ... numeros negativos y con decimales
... si el decimal pasa de 0,5 redondea al numero inferior y esto provoca un error [...]
... tambien los numeros 35, 45, 55, 55,65, 75, 85 y 95 si ... decimales ... superan el 0.5 ... error.
... he aplicado una pequeña correcion a la funcion auxiliar espero no haber metido la pata..



tienes toda la razon, pero se trata de un error de omision => MIO <= :((
a la hora 'buena' [a la hora de la verdad], cuando estaba 'simplificando' la funcion 'principal'...
'ME COMI' un llamado a la funcio Int() en la penultima linea del codigo [en la funcion 'EnLetras']
que dice => EnLetras = "(" & Letras(Abs(Valor)) & Moneda & Fracs & ")"
debe decir => EnLetras = "(" & Letras(Int(Abs(Valor))) & Moneda & Fracs & ")"

la funcion 'auxiliar' [que es el 'motor principal' de la funcion] => ¡ NO 'necesita' correccion !!! <[a mi se me 'chispotio'... perdon]

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida