für InterBase und FireBird | ||
Funktionen enthalten in der FreeAdhocUDF.dll/.so/.dylib : | ||
Numerische-Funktionen | 75 Funktionen | |
Erzeugen | 4 Funktion | |
Formatieren | 13 Funktionen | |
Berechnen | 21 Funktionen | |
Vergleichen | 4 Funktionen | |
Binär | 8 Funktionen | |
Trigonometrie | 25 Funktionen | |
ab FireBird Version 2.1 kann diese Funktion ersetzt werden | ||
Output
RETURN
Mechanismus wenn nicht anderes angegeben: FREE_IT Die TestSQLs mit NULL funktionieren nur ab FireBird 2 |
Numerische-Funktionen: Formatieren | ||
F_ROUND | Input/Output-kompatibel
zu
FreeUDFLibC |
|
Entrypoint | f_round | UTF-8 kompatibel |
Input | DOUBLE | auf Ganzahl zu rundende Flieskommazahl |
Output | INTEGER | auf einen ganzahligen Wert gerundete Flieskommazahl |
Es wird
kaufmännisch
gerundet wie bei
F_ZAHLRUNDEN. Wegen gleichlautender C-Funktion mußte der Entrypoint von round auf f_round geändert werden. Darum jetzt KEINE Entrypoint-Kopatibilität mehr zur FreeUDFLibC. TestSQL SELECT 16 AS ISCORRECT, F_ROUND(15.567) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ROUND(NULL) FROM RDB$DATABASE; |
||
F_ROUNDFLOAT | kompatibel zu FreeUDFLib, FreeUDFLib AvERP | |
Entrypoint | roundfloat | UTF-8 kompatibel |
Input | DOUBLE DOUBLE |
zu
rundende
Flieskommazahl Pattern, wie Flieskommazahl aussehen soll (z.B. 0.01); rundet auf das nächste Vielfache des 2. Parameters |
Output | DOUBLE | gerundete Flieskommazahl im Stil von Parameter 2 |
TestSQL SELECT 15.55 AS ISCORRECT, F_ROUNDFLOAT(15.567, 0.05) FROM RDB$DATABASE; SELECT 15.56 AS ISCORRECT, F_ROUNDFLOAT(15.567, 0.02) FROM RDB$DATABASE; SELECT 15.57 AS ISCORRECT, F_ROUNDFLOAT(15.567, 0.01) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ROUNDFLOAT(NULL, NULL) FROM RDB$DATABASE; |
||
ab | ersetzbar durch ROUND | |
F_ZAHLRUNDEN F_ROUNDCOMMON |
kompatibel
zu
FreeUDFLib AvERP, GrUDF Input/Output-kompatibel zu rFunc (ROUND) |
|
Entrypoint | zahlrunden | UTF-8 kompatibel |
Input | DOUBLE INTEGER |
zur
rundender
Wert Anzahl der Stellen, auf die kaufmännisch gerundet werden soll |
Output | DOUBLE | auf Parameter 2 -Stellen kaufmännisch gerundete Flieskommazahl |
Kaufmännisches
Runden. Diese Rundungsregel wird durch die Norm DIN
1333 beschrieben. Aus Wikipedia http://de.wikipedia.org/wiki/Runden: Ist die Ziffer an der ersten wegfallenden Dezimalstelle (im Beispiel hier unten die dritte Nachkommastelle) nicht größer als eine 4, wird abgerundet. Anderenfalls wird aufgerundet. Die folgenden Nachkommastellen werden nicht berücksichtigt. * aus 2,1349... € wird 2,13 € * aus 2,1350... € wird 2,14 € Negative Zahlen werden nach ihrem Betrag gerundet, bei einer 5 also weg von Null: * aus −2,1349... € wird −2,13 € * aus −2,1350... € wird −2,14 € TestSQL SELECT 14.5 AS ISCORRECT, F_ZAHLRUNDEN(14.4935, 1) FROM RDB$DATABASE; SELECT 14.49 AS ISCORRECT, F_ZAHLRUNDEN(14.4935, 2) FROM RDB$DATABASE; SELECT 14.494 AS ISCORRECT, F_ZAHLRUNDEN(14.4935, 3) FROM RDB$DATABASE; SELECT -14.494 AS ISCORRECT, F_ZAHLRUNDEN(-14.4935, 3) FROM RDB$DATABASE; SELECT 14.494 AS ISCORRECT, F_ZAHLRUNDEN(14.4936, 3) FROM RDB$DATABASE; SELECT 14.4935 AS ISCORRECT, F_ZAHLRUNDEN(14.4935, 6) FROM RDB$DATABASE; SELECT 40.43 AS ISCORRECT, F_ZAHLRUNDEN(40.425, 2) FROM RDB$DATABASE; SELECT 40.42 AS ISCORRECT, F_ZAHLRUNDEN(40.4242, 2) FROM RDB$DATABASE; SELECT 40.42 AS ISCORRECT, F_ZAHLRUNDEN(40.4246, 2) FROM RDB$DATABASE; SELECT 75.15 AS ISCORRECT, F_ZAHLRUNDEN(395.50 * (19.00 / 100),2) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ZAHLRUNDEN(NULL, NULL) FROM RDB$DATABASE; |
||
F_ROUNDTOEVEN | Funktion
von adhoc |
|
Entrypoint | roundtoeven | UTF-8 kompatibel |
Input | DOUBLE INTEGER |
zur
rundender
Wert Anzahl der Stellen, auf die unverzerrt gerundet werden soll |
Output | DOUBLE | auf Parameter 2 -Stellen gerundete Flieskommazahl nach "Banker"-Regeln |
Unverzerrte
oder mathematische Rundung. Sie ist im IEEE-754-Standard
für
das
Rechnen mit binären Gleitkommazahlen in Computern vorgesehen. Aus Wikipedia http://de.wikipedia.org/wiki/Runden: Kaufmännisches und unverzerrtes Runden unterscheiden sich nur darin, wohin eine Zahl genau in der Mitte zwischen zwei Zahlen mit der gewählten Anzahl von Dezimalziffern gerundet wird. Das kaufmännische Runden erzeugt kleine statistische Fehler, da das Aufrunden um 0,5 vorkommt, das Abrunden um 0,5 jedoch nie; das kann Statistiken geringfügig verzerren. Außerdem ist das Verhalten bei positiven und negativen Zahlen unterschiedlich, wenn die zu rundende Ziffer eine 5 ist. Es gibt ein Verfahren, das diese Probleme vermeidet, die unverzerrte Rundung (englisch round to even). Es rundet von der genauen Mitte zwischen zwei Ziffern immer zur nächsten geraden Zahl auf oder ab. Ansonsten entspricht es dem kaufmännischen Verfahren: * aus 2,33 wird 2,3 * aus 2,35 wird 2,4 * aus 2,45 (exakt) wird 2,4 * aus 2,4500001 wird 2,5 * aus 2,47 wird 2,5 * aus 2,53 wird 2,5 * aus 2,55 wird 2,6 Negative Zahlen werden nach ihrem Betrag gerundet: * aus −2,35 wird −2,4 * aus −2,45 (exakt) wird −2,4 * aus −2,4500001 wird −2,5 * aus −2,46 wird −2,5 * aus −2,449 wird −2,4 Diese Art der Rundung ist bei Logarithmentafeln, im Vermessungswesen, in der Statistik und bei Banken üblich. TestSQL SELECT 21.14 AS ISCORRECT, F_ROUNDTOEVEN(21.145, 2) FROM RDB$DATABASE SELECT 215.14 AS ISCORRECT, F_ROUNDTOEVEN(215.145, 2) FROM RDB$DATABASE SELECT 215.16 AS ISCORRECT, F_ROUNDTOEVEN(215.155, 2) FROM RDB$DATABASE SELECT 3.02 AS ISCORRECT, F_ROUNDTOEVEN(3.016, 2) FROM RDB$DATABASE; SELECT 3.01 AS ISCORRECT, F_ROUNDTOEVEN(3.013, 2) FROM RDB$DATABASE; SELECT 3.02 AS ISCORRECT, F_ROUNDTOEVEN(3.015, 2) FROM RDB$DATABASE; SELECT 3.04 AS ISCORRECT, F_ROUNDTOEVEN(3.045, 2) FROM RDB$DATABASE; SELECT 3.05 AS ISCORRECT, F_ROUNDTOEVEN(3.04501, 2) FROM RDB$DATABASE; SELECT -2.4 AS ISCORRECT, F_ROUNDTOEVEN(-2.35, 1) FROM RDB$DATABASE; SELECT -2.4 AS ISCORRECT, F_ROUNDTOEVEN(-2.45, 1) FROM RDB$DATABASE; SELECT -2.5 AS ISCORRECT, F_ROUNDTOEVEN(-2.4500001, 1) FROM RDB$DATABASE; SELECT -2.4 AS ISCORRECT, F_ROUNDTOEVEN(-2.449, 1) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ROUNDTOEVEN(NULL, NULL) FROM RDB$DATABASE; |
||
F_SOFTROUND | Input/Output-kompatibel zu rfunc (SOFTROUND) | |
Entrypoint | softround | UTF-8 kompatibel |
Input | DOUBLE INTEGER |
auf
Ganzahl
zu
rundende Flieskommazahl Stelle, auf die gerundet werden soll |
Output | DOUBLE | auf Parameter 2 -Stellen kaufmännisch gerundete Flieskommazahl |
Es wird
kaufmännisch
gerundet wie bei
F_ZAHLRUNDEN. Wenn das Ergebnis nach dem Runden 0 wäre, wird statt dessen der ungerundete Wert zurückgegeben. TestSQL SELECT 0.0016 AS ISCORRECT, F_SOFTROUND(0.0016, 2), F_ZAHLRUNDEN(0.0016, 2) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_SOFTROUND(NULL, NULL) FROM RDB$DATABASE; |
||
F_RAPPENRUNDUNG | Funktion
von adhoc |
|
Entrypoint | rappenrundung | UTF-8 kompatibel |
Input | DOUBLE | auf Ganzahl zu rundende Flieskommazahl |
Output | DOUBLE | nach Rappenrundungsregel gerundete Flieskommazahl |
Aus
Wikipedia http://de.wikipedia.org/wiki/Rundung#Rappenrundung Eine Besonderheit in der Schweiz ist die Rappenrundung. Obwohl in der Schweiz durchaus nach Bedarf mit Rappen gerechnet wird, werden jedoch keine Beträge kleiner als 5 Rappen in Bargeld bezahlt oder in Rechnung gestellt. Effektive Geldbeträge müssen entsprechend gerundet werden. Sofern kaufmännisch gerundet wird, geschieht dies nach folgendem Schema: Ausschlaggebend für die Rundung ist die Mitte zwischen 0 und 5 Rappen, resp. zwischen 5 und den nächsten 10 Rappen. Wenn die zu rundende Zahl gleich oder höher als die Mitte ist, wird aufgerundet, ansonsten abgerundet. TestSQL SELECT '1.00' AS ISCORRECT, F_RAPPENRUNDUNG(1.000) FROM RDB$DATABASE; SELECT '1.00' AS ISCORRECT, F_RAPPENRUNDUNG(1.024) FROM RDB$DATABASE; SELECT '1.05' AS ISCORRECT, F_RAPPENRUNDUNG(1.025) FROM RDB$DATABASE; SELECT '1.05' AS ISCORRECT, F_RAPPENRUNDUNG(1.074) FROM RDB$DATABASE; SELECT '1.10' AS ISCORRECT, F_RAPPENRUNDUNG(1.075) FROM RDB$DATABASE; SELECT '1.10' AS ISCORRECT, F_RAPPENRUNDUNG(1.099) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_RAPPENRUNDUNG(NULL) FROM RDB$DATABASE; |
||
F_FIXEDPOINT | kompatibel zu FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP | |
Entrypoint | fixedpoint | UTF-8 kompatibel |
Input | DOUBLE INTEGER |
zu
rundende
Flieskommazahl Anzahl Stellen, auf die gerundet werden soll |
Output | CSTRING(32) | Flieskommazahl gerundet auf die Anzahl der Stellen Parameter 2 |
Im
Unterschied zu F_ZAHLRUNDEN ist hier das
Ergebnis ein String! Es wird "amerikanisch" gerundet, also wie F_ROUNDTOEVEN! In der String-Ausgabe ist das Dezimal-Trennzeichen ein “.”! TestSQL SELECT '12345.5' AS ISCORRECT, F_FIXEDPOINT(12345.46, 1) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_FIXEDPOINT(NULL, NULL) FROM RDB$DATABASE; |
||
F_FIXEDPOINTLANG | Funktion von adhoc |
|
Entrypoint | fixedpointlang | UTF-8 kompatibel |
Input | DOUBLE INTEGER CSTRING(1) CSTRING(1) |
zu
rundende
Flieskommazahl Anzahl Stellen, auf die gerundet werden soll Zeichen für Dezimaltrennung Zeichen für Tausendertrennung |
Output | CSTRING(32) | Flieskommazahl auf Anzahl der Stellen von Parameter 2 mit definierbaren Dezimal- und Tausender-Trennzeichen |
Es wird
kaufmännisch
gerundet wie bei
F_ZAHLRUNDEN. TestSQL SELECT '12.345,5' AS ISCORRECT, F_FIXEDPOINTLANG(12345.46, 1, ',', '.') FROM RDB$DATABASE; SELECT '12.345' AS ISCORRECT, F_FIXEDPOINTLANG(12345.46, 0, ',', '.') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_FIXEDPOINTLANG(NULL, NULL, NULL, NULL) FROM RDB$DATABASE; |
||
ab | ersetzbar durch TRUNC | |
F_TRUNCATE | kompatibel zu FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP, GrUDF | |
Entrypoint | f_truncate | UTF-8 kompatibel |
Input | DOUBLE | abzuschneidende Flieskommazahl |
Output | INTEGER | Flieskommazahl mit abgeschnittenen Nachkommastellen |
TestSQL SELECT 15 AS ISCORRECT, F_TRUNCATE(15.567) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_TRUNCATE(NULL) FROM RDB$DATABASE; |
||
F_DOLLARVAL F_CONVERTTODOLLAR |
kompatibel
zu
FreeUDFLib,
FreeUDFLib AvERP kompatibel zu FreeUDFLibC |
|
Entrypoint | converttodollar | UTF-8 kompatibel |
Input | DOUBLE | Flieskommawert |
Output | CSTRING(32) | Dollar-Zahlenwert ($ vor der Zahl) (gerundet auf 2 Nachkommastellen) |
TestSQL SELECT '$15.68' AS ISCORRECT, F_CONVERTTODOLLAR(15.678) FROM RDB$DATABASE; SELECT '$15.68' AS ISCORRECT, F_DOLLARVAL(15.678) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_DOLLARVAL(NULL) FROM RDB$DATABASE; |
||
F_EUROVAL | Funktion von adhoc |
|
Entrypoint | euroval | nicht UTF-8 kompatibel - benutze U_INPUTVAL |
Input | DOUBLE | Flieskommawert |
Output | CSTRING(32) | EURO-Zahlenwert (EUR nach der Zahl) (gerundet auf 2 Nachkommastellen) |
SELECT
'15.47 EUR' AS ISCORRECT,
F_EUROVAL(15.47) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_EUROVAL(NULL) FROM RDB$DATABASE; |
||
F_INPUTVAL | Funktion von adhoc |
|
Entrypoint | inputval | UTF-8 kompatibel |
Input | DOUBLE | Flieskommawert |
CSTRING(10) | Währungskennzeichen |
|
Output | CSTRING(32) | Zahlenwert mit Währungskennzeichen nach der Zahl (gerundet auf 2 Nachkommastellen) |
SELECT
'15.42 €' AS ISCORRECT,
F_INPUTVAL(15.4249, '€') FROM RDB$DATABASE SELECT NULL AS ISCORRECT, F_INPUTVAL(NULL) FROM RDB$DATABASE; |
||
F_NUMINWORDS | Funktion von adhoc |
|
Entrypoint | numinwords | (noch) nicht UTF-8 kompatibel |
Input | DOUBLE | Flieskommawert |
SMALLINT | Anzahl der gewünschten Nachkommastellen (keine Rundung!) | |
CSTRING(2) | Sprachkennzeichen für die Ausgabe | |
Output | CSTRING(32) | Flieskommazahl
in
Wörtern in der gewählten Sprache |
Sprachkennzeichen:
uk
= englisch,
de = deutsch, fr = französich, it = italienisch, es =
spanisch, pt =
portugisisch, nl = niederländisch, no = norwegisch Bokmål, se = schwedisch, dk = dänisch, fi = finnisch, hu = ungarisch, ie = irisch(es gälisch), ee = estnisch, is = isländisch, al = albanisch, va = lateinisch, v1 = kirchlisches lateinisch, c1 = katalanisch, s1 = schottisch, s2 = schottisches gälisch, w1 = walisich, b1 = bretonisch, b2 = baskisch, n1 = norwegisch Nynorsk, za = afrikaans, fo = faörisch, lu = luxembourgisch, w2 = wallonisch TestSQL SELECT '***eins-vier-fünf***' AS ISCORRECT, F_NUMINWORDS(145, 0, 'de') FROM RDB$DATABASE; SELECT '***eins-vier-fünf-Komma-drei-zwei***' AS ISCORRECT, F_NUMINWORDS(145.32, 2, 'de') FROM RDB$DATABASE; SELECT '***eins-vier-fünf-Komma-drei-zwei-null-null***' AS ISCORRECT, F_NUMINWORDS(145.32, 4, 'de') FROM RDB$DATABASE; SELECT '***one-four-five-point-three-two***' AS ISCORRECT, F_NUMINWORDS(145.32, 2, 'uk') FROM RDB$DATABASE; SELECT '***un-quatre-cinq-virgule-trois-deux***' AS ISCORRECT, F_NUMINWORDS(145.32, 2, 'fr') FROM RDB$DATABASE; SELECT '***uno-cuatro-cinco-coma-tres-dos***' AS ISCORRECT, F_NUMINWORDS(145.32, 2, 'es') FROM RDB$DATABASE; SELECT '***uno-quattro-cinque-virgola-tre-due***' AS ISCORRECT, F_NUMINWORDS(145.32, 2, 'it') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_NUMINWORDS(NULL, NULL, NULL) FROM RDB$DATABASE; |
||
|
|