Resumen Rutina para traducir cifras   (2 mensajes )

> Teneis hecha alguna rutina que traduzca cifras en pesetas:
> 10000 --> diezmil pesetas
> 13285 --> Trecemil Doscientas Ochenta y Cinco pesetas

Esta rutina hace lo que pides. Es de la página del Guille y tienes que pegarla en un módulo:
Aprovecho también para desearos un feliz año.


'-----------------------------------------------------------------
' gsNumero.BAS Módulo para procedimientos numéricos ( 1/Mar/91)
' Versión para Windows (25/Oct/96)
'
' Última revisión: (10/Jul/97)
'
'(c)Guillermo Som, 1991-97
'-----------------------------------------------------------------
Option Explicit
Option Compare Text

'Declaradas a nivel de módulo
Dim unidad(0 To 9) As String
Dim decena(0 To 9) As String
Dim centena(0 To 10) As String
Dim deci(0 To 9) As String
Dim otros(0 To 15) As String



Private Sub InicializarArrays()
    If unidad(1) <> "una" Then
        'Asignar los valores
        unidad(1) = "una"
        unidad(2) = "dos"
        unidad(3) = "tres"
        unidad(4) = "cuatro"
        unidad(5) = "cinco"
        unidad(6) = "seis"
        unidad(7) = "siete"
        unidad(8) = "ocho"
        unidad(9) = "nueve"
        '
        decena(1) = "diez"
        decena(2) = "veinte"
        decena(3) = "treinta"
        decena(4) = "cuarenta"
        decena(5) = "cincuenta"
        decena(6) = "sesenta"
        decena(7) = "setenta"
        decena(8) = "ochenta"
        decena(9) = "noventa"
        '
        centena(1) = "ciento"
        centena(2) = "doscientas"
        centena(3) = "trescientas"
        centena(4) = "cuatrocientas"
        centena(5) = "quinientas"
        centena(6) = "seiscientas"
        centena(7) = "setecientas"
        centena(8) = "ochocientas"
        centena(9) = "novecientas"
        centena(10) = "cien" 'Parche
        '
        deci(1) = "dieci"
        deci(2) = "veinti"
        deci(3) = "treinta y "
        deci(4) = "cuarenta y "
        deci(5) = "cincuenta y "
        deci(6) = "sesenta y "
        deci(7) = "setenta y "
        deci(8) = "ochenta y "
        deci(9) = "noventa y "
        '
        otros(1) = "1"
        otros(2) = "2"
        otros(3) = "3"
        otros(4) = "4"
        otros(5) = "5"
        otros(6) = "6"
        otros(7) = "7"
        otros(8) = "8"
        otros(9) = "9"
        otros(10) = "10"
        otros(11) = "once"
        otros(12) = "doce"
        otros(13) = "trece"
        otros(14) = "catorce"
        otros(15) = "quince"
    End If
End Sub



Public Function Numero2Letra(ByVal strNum As String, Optional ByVal vLo,
            Optional ByVal vMoneda, Optional ByVal vCentimos) As String
    '----------------------------------------------------------
    ' Convierte el número strNum en letras (28/Feb/91)
    ' Versión para Windows (25/Oct/96)
    ' Variables estáticas (15/May/97)
    ' Parche de "Esteve" <esteve@mur.hnet.es> (20/May/97)
    ' Revisión para decimales (10/Jul/97)
    '----------------------------------------------------------

    Dim i As Integer
    Dim Lo As Integer
    Dim iHayDecimal As Integer 'Posición del signo decimal
    Dim sDecimal As String 'Signo decimal a usar
    Dim sEntero As String
    Dim sFraccion As String
    Dim fFraccion As Single
    Dim sNumero As String
    '
    Dim sMoneda As String
    Dim sCentimos As String

    'Si se especifica, se usarán
    If Not IsMissing(vMoneda) Then
        sMoneda = " " & Trim$(vMoneda) & " "
    Else
        sMoneda = " "
    End If
    If Not IsMissing(vCentimos) Then
        sCentimos = " " & Trim$(vCentimos)
    End If
    'Averiguar el signo decimal
    sNumero = Format$(25.5, "#.#")
    If InStr(sNumero, ".") Then
        sDecimal = "."
    Else
        sDecimal = ","
    End If
    'Si no se especifica el ancho...
    If IsMissing(vLo) Then
        Lo = 0
    Else
        Lo = vLo
    End If
    '
    If Lo Then
        sNumero = Space$(Lo)
    Else
        sNumero = ""
    End If
    'Quitar los espacios que haya por medio

    Do
        i = InStr(strNum, " ")
        If i = 0 Then Exit Do
        strNum = Left$(strNum, i - 1) & Mid$(strNum, i + 1)
    Loop

    'Comprobar si tiene decimales
    iHayDecimal = InStr(strNum, sDecimal)
    If iHayDecimal Then
        sEntero = Left$(strNum, iHayDecimal - 1)
        sFraccion = Mid$(strNum, iHayDecimal + 1) & "00"
        'obligar a que tenga dos cifras
        sFraccion = Left$(sFraccion, 2)
        fFraccion = Val(sFraccion)

        'Si no hay decimales... no agregar nada...
        If fFraccion < 1 Then
            strNum = RTrim$(UnNumero(sEntero) & sMoneda)
            If Lo Then
                LSet sNumero = strNum
            Else
                sNumero = strNum
            End If
            Numero2Letra = sNumero
            Exit Function
        End If

        sEntero = UnNumero(sEntero)
        sFraccion = UnNumero(sFraccion)
        '
        strNum = sEntero & sMoneda & "con " & sFraccion & sCentimos
        If Lo Then
            LSet sNumero = RTrim$(strNum)
        Else
            sNumero = RTrim$(strNum)
        End If
        Numero2Letra = sNumero
    Else
        strNum = RTrim$(UnNumero(strNum) & sMoneda)
        If Lo Then
            LSet sNumero = strNum
        Else
            sNumero = strNum
        End If
        Numero2Letra = sNumero
    End If
End Function



Private Function UnNumero(ByVal strNum As String) As String
    '----------------------------------------------------------
    'Esta es la rutina principal (10/Jul/97)
    'Está separada para poder actuar con decimales
    '----------------------------------------------------------

    Dim lngA As Double
    Dim Negativo As Boolean
    Dim L As Integer
    Dim Una As Boolean
    Dim Millon As Boolean
    Dim Millones As Boolean
    Dim vez As Integer
    Dim MaxVez As Integer
    Dim k As Integer
    Dim strQ As String
    Dim strB As String
    Dim strU As String
    Dim strD As String
    Dim strC As String
    Dim iA As Integer
    '
    Dim strN() As String

    'Si se amplia este valor... no se manipularán bien los números
    Const cAncho = 12
    Const cGrupos = cAncho \ 3
    '
    InicializarArrays

    'Si se produce un error que se pare el mundo!!!
    On Local Error GoTo 0

    lngA = Abs(CDbl(strNum))
    Negativo = (lngA <> CDbl(strNum))
    strNum = LTrim$(RTrim$(Str$(lngA)))
    L = Len(strNum)

    If lngA < 1 Then
        UnNumero = "cero"
        Exit Function
    End If
    '
    Una = True
    Millon = False
    Millones = False
    If L < 4 Then Una = False
    If lngA > 999999 Then Millon = True
    If lngA > 1999999 Then Millones = True
    strB = ""
    strQ = strNum
    vez = 0

    ReDim strN(1 To cGrupos)
    strQ = Right$(String$(cAncho, "0") & strNum, cAncho)
    For k = Len(strQ) To 1 Step -3
        vez = vez + 1
        strN(vez) = Mid$(strQ, k - 2, 3)
    Next
    MaxVez = cGrupos
    For k = cGrupos To 1 Step -1
        If strN(k) = "000" Then
            MaxVez = MaxVez - 1
        Else
            Exit For
        End If
    Next
    For vez = 1 To MaxVez
        strU = "": strD = "": strC = ""
        strNum = strN(vez)
        L = Len(strNum)
        k = Val(Right$(strNum, 2))
        If Right$(strNum, 1) = "0" Then
            k = k \ 10
            strD = decena(k)
        ElseIf k > 10 And k < 16 Then
            k = Val(Mid$(strNum, L - 1, 2))
            strD = otros(k)
        Else
            strU = unidad(Val(Right$(strNum, 1)))
            If L - 1 > 0 Then
                k = Val(Mid$(strNum, L - 1, 1))
                strD = deci(k)
            End If
        End If
        '---Parche de Esteve
        If L - 2 > 0 Then
            k = Val(Mid$(strNum, L - 2, 1))
            'Con esto funcionará bien el 100100, por ejemplo...
            If k = 1 Then 'Parche
                If Val(strNum) = 100 Then 'Parche
                    k = 10 'Parche
                End If 'Parche
            End If
            strC = centena(k) & " "
        End If
        '------
        If strU = "uno" And Left$(strB, 4) = " mil" Then strU = ""
        strB = strC & strD & strU & " " & strB

        If (vez = 1 Or vez = 3) Then
            If strN(vez + 1) <> "000" Then strB = " mil " & strB
        End If
        If vez = 2 And Millon Then
            If Millones Then
                strB = " millones " & strB
            Else
                strB = "un millón " & strB
            End If
        End If
    Next
    strB = Trim$(strB)
    If Right$(strB, 3) = "uno" Then strB = Left$(strB, Len(strB) - 1) & "a"
    Do 'Quitar los espacios que haya por medio
        iA = InStr(strB, " ")
        If iA = 0 Then Exit Do
        strB = Left$(strB, iA - 1) & Mid$(strB, iA + 1)
    Loop
    If Left$(strB, 6) = "una un" Then strB = Mid$(strB, 5)
    If Left$(strB, 7) = "una mil" Then strB = Mid$(strB, 5)
    If Right$(strB, 16) <> "millones mil una" Then
        iA = InStr(strB, "millones mil una")
        If iA Then strB = Left$(strB, iA + 8) & Mid$(strB, iA + 13)
    End If
    If Right$(strB, 6) = "ciento" Then strB = Left$(strB, Len(strB) - 2)
    If Negativo Then strB = "menos " & strB

    UnNumero = Trim$(strB)
End Function



Saludos
Sergio
scardenas@bigfoot.com

Posh Power !!!!
***********++++++++***********
Naked
Nothing but a smile upon her face
Naked
She wants to play seek and hide, no one to hide behind
Naked
This child has fallen from grace
Naked
Don't be afraid to stare she is only naked
(Naked - Spice Girls)
***********++++++++***********
[I've got PGP / Tengo PGP]
ICQ: 6369154

Content-Type: text/plain;
    charset="iso-8859-1"

X-MIME-Autoconverted: from 8bit to quoted-printable by amadeus.spin.com.mx id JAA19285


-----Original Message-----
De: Jose Angel Mateo <ventecnic@redestb.es>
Para: Foro Visual Basic Rediris <vb-esp@ccc.uba.ar>
Fecha: Miércoles 7 de Enero de 1998 3:45 AM
Asunto: (VB-ESP) Rutina para traducir cifras



    Hola a todos,

    Teneis hecha alguna rutina que traduzca cifras en pesetas:
        10000 --> diezmil pesetas
        13285 --> Trecemil Doscientas Ochenta y Cinco pesetas
        ....


Tengo una rutina que lo traduce a Pesos Mexicanos B-), sin embargo no creo
que sea mayor problema (cambiar las unidades monetarias y ya) adaptarlo a
tus necesidades. Es una función que se llama Num2Let y está en VB3. Te envío
el fuente por este medio.

+¡Saludos desde México!+
| |
| .+'~~'+. |
| * Tron * David.BAS |
| `+,__,+' |
| |
+-adgarza@spin.com.mx--+



Download num2letv.mak  Download num2letv.frx  Download num2letv.frm  



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com