Convertire un numero decimale in numerazione romana

Da Gambas-it.org - Wikipedia.

Per convertire un numero intero decimale in un numero a rappresentazione numerale romana è possibile utilizzare un codice come quello seguente:

Public Struct CifraRomana_S
 cf_stringa As String
 cf_intero As Integer
End Struct

Private RD As New CifraRomana_S[]


Private Function ConverteInRomano(numerus As Short) As String

 Dim rd0, rd1, rd2, rd3, rd4, rd5, rd6, rd7, rd8, rd9, rd10, rd11, rd12 As New CifraRomana_S
 Dim stringaRomana As String
 Dim i As Integer


  If numerus > 3999 Then
    Message.Warning("Il numero da convertire non deve essere superiore a 3999 !")
    Return
  Endif


  rd0.cf_stringa = "M"
  rd0.cf_intero = 1000
   RD.Add(rd0)
  rd1.cf_stringa = "CM"
  rd1.cf_intero = 900
   RD.Add(rd1)
  rd2.cf_stringa = "D"
  rd2.cf_intero = 500
   RD.Add(rd2)
  rd3.cf_stringa = "CD"
  rd3.cf_intero = 400
   RD.Add(rd3)
  rd4.cf_stringa = "C"
  rd4.cf_intero = 100
   RD.Add(rd4)
  rd5.cf_stringa = "XC"
  rd5.cf_intero = 90
   RD.Add(rd5)
  rd6.cf_stringa = "L"
  rd6.cf_intero = 50
   RD.Add(rd6)
  rd7.cf_stringa = "XL"
  rd7.cf_intero = 40
   RD.Add(rd7)
  rd8.cf_stringa = "X"
  rd8.cf_intero = 10
   RD.Add(rd8)
  rd9.cf_stringa = "IX"
  rd9.cf_intero = 9
   RD.Add(rd9)
  rd10.cf_stringa = "V"
  rd10.cf_intero = 5
   RD.Add(rd10)
  rd11.cf_stringa = "IV"
  rd11.cf_intero = 4
   RD.Add(rd11)
  rd12.cf_stringa = "I"
  rd12.cf_intero = 1
   RD.Add(rd12)

  For i = 0 To 12
    While (RD[i].cf_intero <= numerus)
      stringaRomana &= RD[i].cf_stringa
      numerus -= RD[i].cf_intero
    Wend
  Next

  Return stringaRomana

End


Rappresentare in numerazione romana una cifra superiore a 3999

Poiché nella numerazione romana per rappresentare una cifra non possono essere utilizzate più di tre segni della medesima lettera (ad esempio per rappresentare il numero 4 si usano le lettere IV e non IIII), per rappresentare le cifre superiori a 3999 non sarà possibile, dunque, scrivere più di tre volte la lettera "M" (che sta per mille). Il stema numerico romano utilizza degli appositi segni diacritici al di sopra delle lettere per moltiplicare per 10000, per 100000 e per 1000000.

E' possibile ottenere, ancorché con una certa approssimazione, la rappresentazione grafica di questi particolari simboli numerici romani utilizzando anche un paio di caratteri diacritici del codice UNICODE:

TextEdit1.RichText = "V&#x305;  |V&#x305;|  V&#x33F;"


Note

[1] Vi sono diversi codici, anche realizzati con vari linguaggi informatici, per convertire numeri arabi in numeri romani e viceversa. Un paio di essi a titolo esemplificativo: