Umrechnungs-Funktionen:
Zahlensysteme |
 |
F_ROMAN2ARABIC |
Funktion von adhoc
|
Entrypoint
|
roman2arabic |
|
Input |
CSTRING(50) |
Zahl
in
Römischer Schreibweise (Groß- oder Kleinbuchstaben) |
Output |
INTEGER |
Ganzzahl
in
Arabischer Schreibweise |
Es sind im
römischen sowohl die klassiche
Schreibweise wie auch
verkürzte Schreibweisen gültig, z.B. 1999:
klassisch MCMXCIX
verkürzt 1
MXMIX
verkürzt 2 MIM
Es ist auch die originale römische Schreibweise gültig, z.B. 1984:
original
MDCCCCLXXXIIII
klassisch MCMLXXXIV
Es sind im römischen auch nicht erlaubte Schreibweisen gültig, z.B.
1900
statt richtig
MCM
Tausend + (Tausend -
Einhundert)
eigentlich falsch
MDCD
Tausend + Fünfhundert + (Fünfhundert - Einhundert)
Bei einer römischen Zahl, die eine nicht gültige Ziffer enthält,
z.B.
MCA, wird -1 zurückgegeben.
Bei Nichtbeachten der Regel, dass als Subtraktion nur 1 Ziffer
zulässig
ist (IX zulässig, IIX nicht zulässig), kommt Unsinn raus.
Große Tausender-Zahlen, z.B. 10000, werden richtig umgewandelt, wenn
sie MMMMMMMMMM geschrieben wurden.
TestSQL
SELECT 1984 AS ISCORRECT, F_ROMAN2ARABIC('MCMLXXXIV') FROM
RDB$DATABASE;
SELECT NULL AS ISCORRECT, F_ROMAN2ARABIC(NULL) FROM RDB$DATABASE; |
  |
F_ARABIC2ROMAN |
Funktion von adhoc |
Entrypoint
|
arabic2roman |
|
Input |
INTEGER |
Ganzzahl
in
Arabischer Schreibweise |
Output |
CSTRING(250) |
Zahl
in
römische Schreibweise (in klassischer Form) |
Max. Zahl ist
200000
TESTSQL
SELECT 1984, 'MCMLXXXIV' AS ISCORRECT, F_ARABIC2ROMAN(1984) FROM
RDB$DATABASE;
SELECT NULL AS ISCORRECT, F_ARABIC2ROMAN(NULL) FROM RDB$DATABASE; |
  |
F_CONVERTFROM33 |
kompatibel zu
FreeUDFLibC |
Entrypoint
|
convertfrom33 |
|
Input |
CSTRING(254) |
Zahl
im
33-Zahlensystems als String |
Output |
INTEGER |
Ganzzahl
im
Dezimal-System |
TestSQL
SELECT 1000 AS ISCORRECT, F_CONVERTFROM33('WB') FROM RDB$DATABASE;
SELECT NULL AS ISCORRECT, F_CONVERTFROM33(NULL) FROM RDB$DATABASE; |
  |
F_CONVERTTO33 |
kompatibel zu
FreeUDFLibC |
Entrypoint
|
convertto33 |
|
Input |
INTEGER |
Ganzzahl
im
Dezimal-Systeml |
Output |
CSTRING(254) |
Zahl
im
33-Zahlensystem |
TestSQL
SELECT 'WB' AS ISCORRECT, F_CONVERTTO33(1000) FROM RDB$DATABASE;
SELECT NULL AS ISCORRECT, F_CONVERTTO33(NULL) FROM RDB$DATABASE; |
  |
F_CONVERTFROMBASE |
kompatibel zu
FreeUDFLibC |
Entrypoint
|
convertfrombase |
|
Input |
CSTRING(32) |
Zahl
eines
beliebigen Zahlensystems als String |
|
INTEGER |
Basis
der zu
konvertierenden Zahl (z.B. 2 für Binär-System) |
|
CSTRING(8) |
alle
Ziffern,
die im Zahlensystem gültig sind als String (z.B. ‘01234567' für
Oktal-System) |
Output |
INTEGER |
Ganzzahl
im
Dezimal-System |
TestSQL
SELECT 3 AS ISCORRECT, F_CONVERTFROMBASE('11', 2, '01') FROM
RDB$DATABASE;
SELECT 9 AS ISCORRECT, F_CONVERTFROMBASE('11', 8, '01234567') FROM
RDB$DATABASE;
SELECT NULL AS ISCORRECT, F_CONVERTFROMBASE(NUll, NULL, NULL) FROM
RDB$DATABASE; |
  |
F_CONVERTTOBASE |
kompatibel zu
FreeUDFLibC |
Entrypoint
|
converttobase |
|
Input |
INTEGER |
Ganzzahl
im
Dezimal-System |
|
INTEGER |
Basis
des
Sytem, in das konvertiert werden soll (z.B. 2 für Binär-System) |
|
CSTRING(254) |
alle
Ziffern,
die im Zahlensystem gültig sind als String (z.B. ‘01234567' für
Oktal-System) |
Output |
CSTRING(254) |
Zahl
im System
des über Parameter 2 definierten Zahlensystems |
TestSQL
SELECT '11' AS ISCORRECT, F_CONVERTTOBASE(3, 2, '01') FROM
RDB$DATABASE;
SELECT NULL AS ISCORRECT, F_CONVERTTOBASE(NULL, NULL, NULL) FROM
RDB$DATABASE; |
  |
F_HEXTOINT |
kompatibel zu
GrUDF |
Entrypoint
|
hextoint |
|
Input |
CSTRING(20) |
Hexadezimale
Zahl |
Output |
INTEGER |
Ganzzahl
im
Dezimal-System |
TestSQL
SELECT 13 AS ISCORRECT, F_HEXTOINT('000000000d') FROM RDB$DATABASE;
SELECT 13 AS ISCORRECT, F_HEXTOINT('d') FROM RDB$DATABASE;
SELECT 13 AS ISCORRECT, F_HEXTOINT('D') FROM RDB$DATABASE;
SELECT NULL AS ISCORRECT, F_HEXTOINT(NULL) FROM RDB$DATABASE; |
  |
F_INTTOHEX |
kompatibel zu
GrUDF |
Entrypoint
|
inttohex |
|
Input |
INTEGER |
Ganzzahl
im
Dezimal-System |
|
INTEGER |
Anzahl
Stellen
(links aufgefüllt mit führenden Nullen) |
Output |
CSTRING(254) |
Hexadezimale
Zahl |
TestSQL
SELECT '000000000d' AS ISCORRECT, F_INTTOHEX(13, 10) FROM
RDB$DATABASE;
SELECT NULL AS ISCORRECT, F_INTTOHEX(NULL, NULL) FROM RDB$DATABASE; |
  |