Resumen Ayuda convertir de decimal a romano

Mensaje enviado por Jordi Ordiñana <qvestor@teleline.es>

Andrés:
Aquí te envío una posible solución. Todo depende de lo grandes que sean los números que vas a convertir. Este código vale para números de 1 a 999999 (el cero no se representa).

Hay una dificultad a la hora de representar los números romanos.

Los millares superiores a 3.000 se representan con el número normal y un subrayado superior.
                                        _
P.e.: 10.000 no sería XXXXXXXXXX sino X (con la rayita encima de la X).
                       ____
   y 125.000 sería CXXV

Los millones a partir de 3.000.000, se representarían con un subrayado superior doble (dos rayitas). Pero dudo que los romanos (los de antes) manejaran cifras tan altas.

Pero, como no tengo ningún tipo de letra que subraye arriba las letras IVXLCDM, he optado por la solución que he visto en alguna parte, de encerrar los millares entre paréntesis.

Si consigues algún tipo de letra que haga el subrayado, puedes eliminar este "parche" cambiando el código.

Este código lo he ido probando, y me da resultados correctos.

Espero haber sido de ayuda. Un cordial saludo.

Jordi Ordiñana.
Barcelona - España.
mailto:qvestor@teleline.es





------- CONVERTIR NUMEROS DECIMALES A ROMANOS -----------------------------

' Un Form con 1 TextBox y 1 Label. El valor de la etiqueta se actualiza
' con cada cambio del TextBox.

Option Explicit

Private Sub txtDec_Change()
    With txtDec
        lblRom.Text = Dec2Romano(.Text)
        .SelStart = Len(.Text)
    End With
End Sub

Function Dec2Romano(strDec As String) As String
Dim strRom As String
Dim i As Integer, n As Integer, m As Integer
Dim str1 As String, str2 As String, bRom As Boolean

    n = Len(strDec)
    If n > 3 Then
        str1 = Right(strDec, 3)
        str2 = Left(strDec, n - 3)
    Else
        str1 = strDec
        str2 = ""
    End If

    n = 0
    For i = 0 To Len(str1) - 1
        n = n + 1
        strRom = strDig(Mid(str1, Len(str1) - i, 1), n, False) & strRom
    Next

    If Len(str2) > 0 Then
        str1 = ""
        n = 0
        For i = 0 To Len(str2) - 1
            n = n + 1
            str1 = strDig(Mid(str2, Len(str2) - i, 1), n, True) & str1
        Next
        Dec2Romano = IIf(Left(str1, 1) = "M", str1, "(" & str1 & ")") & strRom
    Else
        Dec2Romano = strRom
    End If

End Function



Function strDig(strTxt As String, n As Integer, m As Boolean) As String
Dim str1 As String, str2 As String, str3 As String
     ' Esta segunda función da resultados parciales para cada grupo de tres cifras.

    ' Si consigues el tipo de letra que subraye arriba, habría que cambiar este grupo
    ' If...Endif según si el valor m es True o False

    If n = 1 Then
        str1 = IIf(m = True, "M", "I")
        str2 = "V"
        str3 = "X"
    ElseIf n = 2 Then
        str1 = "X"
        str2 = "L"
        str3 = "C"
    ElseIf n = 3 Then
        str1 = "C"
        str2 = "D"
        str3 = "M"
    End If

    Select Case strTxt
        Case "0"
            strDig = ""
        Case "1", "2", "3"
            strDig = String(Val(strTxt), str1)
        Case "4"
            strDig = IIf(str1 = "M", "I", str1) & str2
        Case "5"
            strDig = str2
        Case "6", "7", "8"
            strDig = str2 & String(Val(strTxt) - 5, IIf(str1 = "M", "I", str1))
        Case "9"
            strDig = IIf(str1 = "M", "I", str1) & str3
    End Select
End Function

-----Mensaje original-----
De: Andrés Colmenero [mailto:acolmenero@colortex.net]
Enviado el: martes, 24 de octubre de 2000 13:41
Para: visualbasic-esp@egroups.com
Asunto: (VB-ESP) Ayuda convertir de decimal a romano


Alguien me puede decir donde encuentro una rutina que transforme cualquier
número decimal a romano.?
Muchas Gracias.



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com