pour InterBase et FireBird | ||
Functions comprises dans FreeAdhocUDF.dll/.so/.dylib : | ||
Fonctions numériques | 75 fonctions | |
Utilitaires | 4 fonctions | |
Formatages | 13 fonctions | |
Calculs | 21 fonctions | |
Comparaisons | 4 fonctions | |
Binaire | 8 fonctions | |
Trigonométrie | 25 fonctions | |
á partir de FireBird 2.1 on peut remplacer par la fonction SQL incorporée | ||
Lors
du
RETURN: FREE_IT, sauf indication contraire Les TestSQL avec NULL ne sont opérationnels que sous FireBird 2.0 |
Fonctions numériques: Formatages | ||
F_ROUND | Entrée/Sortie compatibles avec FreeUDFLibC | |
Entrypoint | f_round | Compatibles UTF-8 |
Entrée | DOUBLE | Nombre en virgule flottante à convertir en valeur entière |
Sortie | INTEGER | Arrondit un nombre en virgule flottante en un nombre entier |
Méthode
courante
pour arrondir a F_ZAHLRUNDEN. Par suite de conflits de noms avec une fonction C, le point d’entrée (Entrypoint) a été modifié de round à f_round. Ce qui a pour effet de supprimer la compatibilité du point d’entrée avec 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 | Compatible avec FreeUDFLib, FreeUDFLib AvERP | |
Entrypoint | roundfloat | Compatibles UTF-8 |
Entrée | DOUBLE DOUBLE |
nombre
en
virgule flottante à arrondir Modèle montarnt le format du nombre à virgule flottante (par exemple 0.01); arrondit au multiple suivant du 2e paramètre |
Sortie | DOUBLE | Arrondit un nombre en virgule flottante |
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; |
||
à partir de | remplaçable par ROUND | |
F_ZAHLRUNDEN F_ROUNDCOMMON |
Compatible
avec FreeUDFLib AvERP,
GrUDF Entrée/Sortie compatibles avec rFunc (ROUND) |
|
Entrypoint | zahlrunden | Compatibles UTF-8 |
Entrée | DOUBLE INTEGER |
valeur
à
arrondir Nombre de chiffres décimaux pour l’arrondi |
Sortie | DOUBLE | Arrondit le nombre à virgule flottante en fonction du nombre de chiffres décimaux spécifié au paramètre 2 |
Méthode
courante
pour arrondir (selon
Wikipedia http://fr.wikipedia.org/wiki/Arrondi): Cette méthode est généralement employée, par exemple en comptabilité, par les scientifiques ou en convertissant des devises. Donnons ici les étapes de cette méthode * choisir le chiffre qui sera le dernier à conserver. * augmenter ce chiffre d'une unité si le chiffre suivant vaut au moins 5 (ceci s'appelle arrondissage par excès) * le laisser identique si le chiffre suivant est strictement inférieur à 5 (cela s'appelle l'arrondissage par défaut) Exemple: 3,046 peut être arrondi aux centièmes en 3,05 (parce que le chiffre suivant (6) est supérieur à 5). Autres exemples en ne gardant qu'un seul chiffre après la virgule : * 1,349 devient 1,3 (car le chiffre suivant 3 est strictement inférieur à 5) * 1,350 devient 1,4 (car le chiffre suivant 3 vaut au moins 5) Les nombres négatifs sont traités selon leur montant: * –2,1349 devient –2,13 € * –2,1350 devient –2,14 € En fait la méthode consiste à séparer les dix chiffres décimaux ( 0, 1 ... 9 ) en deux parties : * les 5 premiers : 0, 1, 2, 3 et 4 pour lesquels on passe à la valeur inférieure * les 5 suivants : 5, 6, 7, 8 et 9 pour lesquels on passe à la valeur supérieure Cette méthode limite l'accumulation d'erreurs lors de calculs successifs. 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 | Fonction de adhoc | |
Entrypoint | roundtoeven | Compatibles UTF-8 |
Input | DOUBLE INTEGER |
valeur
à
arrondir Nombre de chiffres décimaux pour l’arrondi |
Output | DOUBLE | Arrondit le nombre à virgule flottante en fonction du nombre de chiffres décimaux spécifié au paramètre 2 |
Méthode
d'arrondissage des statisticiens (selon Wikipedia http://fr.wikipedia.org/wiki/Arrondi):
Si quatre (ou un chiffre inférieur) est le chiffre qui suit la décimale à laquelle le nombre doit être arrondi, alors la décimale reste inchangée. Alors que si le chiffre suivant la décimale est six ou plus, la décimale est augmentée d'une unité. Enfin si le chiffre suivant est le chiffre cinq lui-même suivi par des chiffres différents de zéro, alors la décimale sera augmenté d'une unité, tandis que si cinq n'est suivi d'aucun chiffre (ou que par des zéros) alors la décimale est augmentée d'une unité lorsqu'elle est impaire et reste inchangée sinon. Cette méthode est parfois appelée « arrondi au chiffre pair » et est employée afin d'éliminer le biais qui surviendrait en arrondissant à chaque fois par excès les nombres dont le dernier chiffre est cinq. Exemples: * 3,046 arrondis aux centièmes devient 3,05 (parce que le chiffre suivant (6) est supérieur à 6) * 3,043 arrondis aux centièmes devient 3,04 ( parce que le chiffre suivant (3) est inférieur à 4) * 3,045 arrondis aux centièmes devient 3,04 (parce que le dernier chiffre est 5, et le chiffre précédent (4) est pair) * 3,015 arrondis aux centièmes devient 3,02 (parce que le dernier chiffre est 5, et le chiffre précédent (1) est impair) Les nombres négatifs sont traités selon leur montant: * −2,35 devient −2,4 * −2,45 (exacte) devient −2,4 * −2,4500001 devient −2,5 * −2,46 devient −2,5 * −2,449 devient −2,4 Pour un arrondissage à l'entier le plus proche, voyez la fonction partie entière. 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 | Entrée/Sortie compatibles avec rFunc (SOFTROUND) | |
Entrypoint | softround | Compatibles UTF-8 |
Entrée | DOUBLE INTEGER |
nombre
en
virgule flottante à arrondir Nombre de chiffres décimaux pour l’arrondi |
Sortie | DOUBLE | pour une valeur entière, nombre à virgule flottante arrondi |
Méthode
courante
pour arrondir a F_ZAHLRUNDEN. Au cas où l’arrondi donnerait 0, la valeur renvoyée est la valeur non arrondie. 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 | Fonction de adhoc | |
Entrypoint | rappenrundung | Compatibles UTF-8 |
Entrée | DOUBLE | nombre
en
virgule flottante à arrondir |
Sortie | DOUBLE | nombre à virgule flottante arrondi selon la règle de l’arrondi commercial (Rappenrundung en Suisse) |
Référence:
Wikipedia http://de.wikipedia.org/wiki/Rundung#Rappenrundung L’arrondi commercial (Rappenrundung) est une particularité suisse. Bien qu’en Suisse on puisse compter en Rappen, un montant inférieur à 5 Rappen en liquide n’est pas dû et n’est pas porté en compte. Les montants en devises doivent être arrondis en conséquence. Cet arrondi commercial suit le schéma suivant: L’arrondi est guidé par le milieu entre 0 et 5 Rappen ou entre 5 et 10 Rappen. Quand le montant est égal ou supérieur à ce milieu, il est arrondi à la borne supérieure, si non à la borne inférieure. 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 | Compatible avec FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP | |
Entrypoint | fixedpoint | Compatibles UTF-8 |
Entrée | DOUBLE INTEGER |
nombre
en
virgule flottante à arrondir Nombre de chiffres décimaux du nombre arrondi |
Sortie | CSTRING(32) | Arrondit un nombre en virgule flottante avec un nombre de décimales spécifiée au paramètre 2 |
Méthode
d'arrondissage des statisticiens a F_ROUNDTOEVEN. Contrairement à F_ZAHLRUNDEN le résultat est ici sous forme de chaîne! Dans la chaîne obtenue en sortie, le séparateur décimal est “.”. 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 | Fonction de adhoc |
|
Entrypoint | fixedpointlang | Compatibles UTF-8 |
Entrée | DOUBLE INTEGER CSTRING(1) CSTRING(1) |
nombre
en
virgule flottante à arrondir Nombre de chiffres décimaux pour arrondir Signe de séparateur décimal Signe de séparateur de milliers |
Sortie | CSTRING(32) | Arrondit le nombre en virgule flottante en tenant compte de nombre de chiffres décimaux du paramètre 2 et des séparateurs (décimal et milliers) définis en paramètres 3 et 4 |
Méthode
courante
pour arrondir a 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; |
||
à partir de | remplaçable par TRUNC | |
F_TRUNCATE | Compatible avec FreeUDFLib, FreeUDFLibC, FreeUDFLib AvERP, GrUDF | |
Entrypoint | f_truncate | Compatibles UTF-8 |
Entrée | DOUBLE | nombre à virgule flottante à tronquer |
Sortie | INTEGER | Supprime la partie décimale d’un nombre à virgule flottante |
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 |
Compatible
avec FreeUDFLib,
FreeUDFLib AvERP Compatible avec FreeUDFLibC |
|
Entrypoint | converttodollar | Compatibles UTF-8 |
Entrée | DOUBLE | Valeur en virgule flottante |
Sortie | CSTRING(32) | Convertit une valeur en virgule flottante en une valeur en dollars (arrondie à 2 décimales) |
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 | Fonction de adhoc |
|
Entrypoint | euroval | pas compatible UTF-8 – emploie U_INPUTVAL |
Entrée | DOUBLE | Valeur en virgule flottante |
Sortie | CSTRING(32) | Valeur en euros (EUR à la suite du nombre) (arrondie à 2 décimales) |
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 | Fonction de adhoc |
|
Entrypoint | euroval | Compatibles UTF-8 |
Entrée | DOUBLE CSTRING(10) |
Valeur
en virgule
flottante Symboles de devises |
Sortie | CSTRING(32) | Valeur avec symboles de devises suivant le nombre (arrondie à 2 décimales) |
SELECT
'15.42 €' AS ISCORRECT,
F_INPUTVAL(15.4249, '€') FROM RDB$DATABASE SELECT NULL AS ISCORRECT, F_INPUTVAL(NULL) FROM RDB$DATABASE; |
||
F_NUMINWORDS | Fonction de adhoc |
|
Entrypoint | numinwords | Pas (encore) compatible UTF-8 |
Input | DOUBLE | Valeur en virgule flottante |
SMALLINT | Nombre de chiffres décimaux (no arrondie) | |
CSTRING(2) | Indicatif de la langue pour le résultat | |
Output | CSTRING(32) | virgule flottante dans la langue choisie |
Indicatif
de la langue: de = allemand, uk = anglais, fr = français, es
=
espagnol, it = italien 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; |
||
|
|