Ho deciso di fare così (scritta da capo):
Public Function lResto(lNumero As Long, lDivisore As Long) As Long
Dim lAppo As Long
Dim lAppa As Long
lAppo = Int(lNumero / lDivisore)
lAppa = lNumero - (lAppo * lDivisore)
Return lAppa
End
Public Function int2romani(iNumero As Long) As String
Dim iAppo As Integer
Dim iMigliaia As Integer
Dim iCentinaia As Integer
Dim iDecine As Integer
Dim iUnita As Integer
Dim sRis As String
If iNumero > 0 And iNumero < 4000 Then
iAppo = iNumero
iMigliaia = iAppo / 1000
iAppo = lResto(iAppo, 1000)
iCentinaia = iAppo / 100
iAppo = lResto(iAppo, 100)
iDecine = iAppo / 10
iUnita = lResto(iAppo, 10)
sRis = ""
If iMigliaia = 1 Then
sRis = "M"
Else If iMigliaia = 2 Then
sRis = "MM"
Else If iMigliaia = 3 Then
sRis = "MMM"
Endif
If iCentinaia = 1 Then
sRis = sRis & "C"
Else If iCentinaia = 2 Then
sRis = sRis & "CC"
Else If iCentinaia = 3 Then
sRis = sRis & "CCC"
Else If iCentinaia = 4 Then
sRis = sRis & "CD"
Else If iCentinaia = 5 Then
sRis = sRis & "D"
Else If iCentinaia = 6 Then
sRis = sRis & "DC"
Else If iCentinaia = 7 Then
sRis = sRis & "DCC"
Else If iCentinaia = 8 Then
sRis = sRis & "DCCC"
Else If iCentinaia = 9 Then
sRis = sRis & "CM"
Endif
If iDecine = 1 Then
sRis = sRis & "X"
Else If iDecine = 2 Then
sRis = sRis & "XX"
Else If iDecine = 3 Then
sRis = sRis & "XXX"
Else If iDecine = 4 Then
sRis = sRis & "XL"
Else If iDecine = 5 Then
sRis = sRis & "L"
Else If iDecine = 6 Then
sRis = sRis & "LX"
Else If iDecine = 7 Then
sRis = sRis & "LXX"
Else If iDecine = 8 Then
sRis = sRis & "LXXX"
Else If iDecine = 9 Then
sRis = sRis & "XC"
Endif
If iUnita = 1 Then
sRis = sRis & "I"
Else If iUnita = 2 Then
sRis = sRis & "II"
Else If iUnita = 3 Then
sRis = sRis & "III"
Else If iUnita = 4 Then
sRis = sRis & "IV"
Else If iUnita = 5 Then
sRis = sRis & "V"
Else If iUnita = 6 Then
sRis = sRis & "VI"
Else If iUnita = 7 Then
sRis = sRis & "VII"
Else If iUnita = 8 Then
sRis = sRis & "VIII"
Else If iUnita = 9 Then
sRis = sRis & "IX"
Endif
Return sRis
Else
Return "ERR"
Endif
End
Grazie
Non è vero che non supera i 4000 è che non si può rappresentare con i caratteri ASCII.
Infatti per rappresentazioni superiori si usa il moltiplicatore a mille dei caratteri usati precedentemente (V, X, D, C, ecc.) che si rappresenta con un trattino sopra la lettera (per moltiplicare x 1000000 due trattini e così via).
...ed infatti... magari con uno stratagemma utilizzando il codice UNICODE ed in particolare i caratteri componibili mediante i caratteri diacritici:
Public Sub Form_Open()
TextEdit1.RichText = "V̅ |V̅| V̿"
End
si riesce, bene o male, a rappresentare quei numeri dal 5000 in su.
Nell'esempio vengomo mostrati tre simboli che rappresentano rispettivamente: 5000, 500000 e 5000000.