Conversión de números a letras [VB6]
Resuelto/Cerrado
mannylikita
Mensajes publicados
17
Fecha de registro
Estado
Miembro
-
wpjo Mensajes publicados 1 Estado Miembro -
wpjo Mensajes publicados 1 Estado Miembro -
Comment puedo convertir números en letras en VB6; en Excel lo hago con morefun.dll
Cuenta con tu colaboración
Ing. Manny LIKITA
Tel: (00243) 98248846
Cuenta con tu colaboración
Ing. Manny LIKITA
Tel: (00243) 98248846
10 respuestas
voila el código integral de la founction tant recherchée :
Function NBenLettres(nb) ' Dim varnum, varnumD, varnumU, varlet ', resultado ' 'varnum : para almacenar las partes del número que vamos a cortar 'varlet : para almacenar la conversión a letras de una parte del número 'varnumD : para almacenar la parte decena de un número a 2 cifras 'varnumU : para almacenar la parte unidad de un número a 2 cifras 'resultado : para almacenar los resultados intermedios de las diferentes etapas Mil veinticinco Euros ' Static chiffre(1 To 19) '*** tabla que contiene el nombre de los 16 primeros Centes Euros números en letras chiffre(1) = "uno" Cents Euros y quince centavos chiffre(2) = "dos" chiffre(3) = "tres" chiffre(4) = "cuatro" chiffre(5) = "cinco" chiffre(6) = "seis" chiffre(7) = "siete" chiffre(8) = "ocho" chiffre(9) = "nueve" chiffre(10) = "diez" chiffre(11) = "once" chiffre(12) = "doce" chiffre(13) = "trece" chiffre(14) = "catorce" chiffre(15) = "quince" chiffre(16) = "dieciséis" chiffre(17) = "diecisiete" chiffre(18) = "dieciocho" chiffre(19) = "diecinueve" Static dizaine(1 To 9) '*** tabla que contiene los nombres de las decenas dizaine(1) = "diez" dizaine(2) = "veinte" dizaine(3) = "treinta" dizaine(4) = "cuarenta" dizaine(5) = "cincuenta" dizaine(6) = "sesenta" dizaine(7) = "setenta" dizaine(8) = "ochenta" dizaine(9) = "noventa" ' '*** Tratamiento del caso cero franc ' If nb >= 1 Then resultado = "" Else resultado = "cero" GoTo fintraitementfrancs End If ' '*** Tratamiento de los millones ' varnum = Int(nb / 1000000) If varnum > 0 Then GoSub centaine_dizaine resultado = varlet + " millón" If varlet <> "uno" Then resultado = resultado + "s" End If ' '*** Tratamiento de los miles ' varnum = Int(nb) Mod 1000000 varnum = Int(varnum / 1000) If varnum > 0 Then GoSub centaine_dizaine If varlet <> "uno" Then resultado = resultado + " " + varlet resultado = resultado + " mil" End If ' '*** Tratamiento de las centenas y decenas ' varnum = Int(nb) Mod 1000 If varnum > 0 Then GoSub centaine_dizaine resultado = resultado + " " + varlet End If resultado = LTrim(resultado) varlet = Right$(resultado, 4) ' '*** Tratamiento de la "s" final para veinte y cien y del "de" para millón ' Select Case varlet Case "cien", "ginta" resultado = resultado + "s" Case "lion", "iones" resultado = resultado + " de" End Select fintraitementfrancs: '*** Etiqueta de ramificación para el caso "cero franc" ' '*** Indicación del término franc ' resultado = resultado + " euro" If nb >= 2 Then resultado = resultado + "s" ' '*** Tratamiento de los centavos ' varnum = Int((nb - Int(nb)) * 100 + 0.5) '*** Sumamos 0,5 '*** para compensar los errores de cálculo debidos a los redondeos If varnum > 0 Then GoSub centaine_dizaine resultado = resultado + " y " + varlet + " centavo" If varnum > 1 Then resultado = resultado + "s" End If ' '*** Conversión 1ª letra en mayúscula ' resultado = UCase(Left(resultado, 1)) + Right(resultado, Len(resultado) - 1) ' '*** devuelve el resultado de la función y fin de la función ' NBenLettres = resultado Exit Function centaine_dizaine: '*** Subprograma de conversión a letras ' '*** de las centenas y decenas ' varlet = "" ' '*** Tratamiento de las centenas ' If varnum >= 100 Then varlet = chiffre(Int(varnum / 100)) varnum = varnum Mod 100 If varlet = "uno" Then varlet = "cien " Else varlet = varlet + " cien " End If End If ' '*** Tratamiento de las decenas ' If varnum <= 19 Then '*** Caso donde la decena es <20 If varnum > 0 Then varlet = varlet + chiffre(varnum) Else '*** Otros casos varnumD = Int(varnum / 10) '*** cifra de las decenas varnumU = varnum Mod 10 '*** cifra de las unidades '''Select Case varnumD '*** generación de las decenas en letras varlet = varlet + dizaine(varnumD) '''Case Is <= 5 '''varlet = varlet + dizaine(varnumD) '''Case 6, 7 '''varlet = varlet + dizaine(6) '''Case 8, 9 '''varlet = varlet + dizaine(8) '''End Select ' '*** tratamiento del separador de las decenas y unidades ' If varnumU = 1 And varnumD < 8 Then varlet = varlet + " y " Else If varnumU <> 0 Then varlet = varlet + "-" '''O varnumD = 7 O varnumD = 9 End If End If ' '*** generación de las unidades ' '''If varnumD = 7 Or varnumD = 9 Then varnumU = varnumU + 10 If varnumU <> 0 Then varlet = varlet + chiffre(varnumU) End If ' '*** Supresión de los espacios a la izquierda y retorno ' varlet = RTrim(varlet) Return End Function
No está mal el código, pero encontré 2 errores.
100 = céntimos en lugar de centavo, y lo mismo para 20.
Buena suerte.
¡Hasta luego!