Umrechnung Dezimalzahlen in römische Zahlen


Die folgende Funktion verdeutlicht die Umrechnung von Dezimalzahlen in römische Zahlen.
Oracle bietet jedoch auch die Möglichkeit Dezimalzahlen über to_char umzuwandeln:
select ltrim(to_char(2005,'RM')) roemisch from dual

Ergebnis:

ROEMISCH
---------------
MMV            
1 row selected

Quellcode:


create or replace function dec2roem(dec number) return varchar2 is
-- ***********************************************************************************************
--    Copyright (c) 2005 Gregor Neveling
--
--    NAME              dec2roem
--
--    Funktion:         Umrechnung Dezimalzahlen (Jahrszahlen) in römische Zahlen
--
--    PARAMETER:        Jahreszahl als Dezimalzahl
--
--    return            römische Zahl.
--
--    CREATED           19.06.2005 Gregor Neveling
--
-- ***********************************************************************************************
dezimalwert  number;
ergebnis     varchar2(200);
BEGIN
   dezimalwert := dec;
   ergebnis    := '';

   WHILE dezimalwert >= 1000
   loop
      ergebnis := ergebnis || 'M';
      dezimalwert := dezimalwert - 1000;
   end loop;

   IF dezimalwert >= 900
   THEN
      ergebnis := ergebnis || 'CM';
      dezimalwert := dezimalwert - 900;
   end if;

   IF dezimalwert >= 500
   THEN
      ergebnis := ergebnis || 'D';
      dezimalwert := dezimalwert - 500;
   end if;

   IF dezimalwert >= 400
   THEN
      ergebnis := ergebnis || 'CD';
      dezimalwert := dezimalwert - 400;
   end if;

   WHILE dezimalwert >= 100
   loop
      ergebnis := ergebnis || 'C';
      dezimalwert := dezimalwert - 100;
   end loop;

   IF dezimalwert >= 90
   THEN
      ergebnis := ergebnis || 'XC';
      dezimalwert := dezimalwert - 90;
   end if;

   IF dezimalwert >= 50
   THEN
      ergebnis := ergebnis || 'L';
      dezimalwert := dezimalwert - 50;
   end if;

   IF dezimalwert >= 40
   THEN
      ergebnis := ergebnis || 'XL';
      dezimalwert := dezimalwert - 40;
   end if;

   WHILE dezimalwert >= 10
   loop
      ergebnis := ergebnis || 'X';
      dezimalwert := dezimalwert - 10;
   end loop;


   IF dezimalwert = 9
   THEN
      ergebnis := ergebnis || 'IX';
      dezimalwert := dezimalwert - 9;
   end if;

   IF dezimalwert >= 5
   THEN
      ergebnis := ergebnis || 'V';
      dezimalwert := dezimalwert - 5;
   end if;

   IF dezimalwert = 4
   THEN
      ergebnis := ergebnis || 'IV';
      dezimalwert := dezimalwert - 4;
   end if;

   WHILE dezimalwert >= 1
   loop
      ergebnis := ergebnis || 'I';
      dezimalwert := dezimalwert - 1;
   end loop;

   return ergebnis;
end;