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;