FirebirdSQL logo
Support dans les applications clients

La bibliothèque fbclient version 4.0 a un support natif pour le type DECFLOAT.Cependant, les anciennes versions de la bibliothèque client ne connaissent pas le type DECFLOAT.Pour que les applications plus anciennes puissent gérer le type DECFLOAT, vous pouvez configurer le mappage des valeurs DECFLOAT vers d’autres types de données disponibles en utilisant l’attribut SET BIND.

Exemples:
SET BIND OF DECFLOAT TO LEGACY;
-- Les valeurs des colonnes de type DECFLOAT seront converties en type DOUBLE PRECISION.

-- une autre option
SET BIND OF DECFLOAT TO DOUBLE PRECISION;

SET BIND OF DECFLOAT(16) TO CHAR;
-- Les valeurs de colonne de DECFLOAT(16) seront converties en CHAR(23).

SET BIND OF DECFLOAT(34) TO CHAR;
-- Les valeurs de colonne de DECFLOAT(34) seront converties en CHAR(42).

SET BIND OF DECFLOAT TO NUMERIC(18, 4);
-- Les valeurs des colonnes de DECFLOAT seront converties en NUMERIC(18, 4).

SET BIND OF DECFLOAT TO NATIVE;
-- Retourne les valeurs des colonnes de type DECFLOAT en type natif

Les différentes liaisons sont utiles si vous prévoyez d’utiliser des valeurs DECFLOAT avec un ancien client qui ne supporte pas son propre format.Vous pouvez choisir entre des chaînes de caractères (précision parfaite, mais mauvaise prise en charge du traitement ultérieur), des valeurs à virgule flottante (prise en charge parfaite du traitement ultérieur, mais mauvaise précision) ou des nombres entiers mis à l’échelle (bonne prise en charge du traitement ultérieur et précision requise, mais plage de valeurs très limitée). Lorsqu’un outil tel que le client GUI universel est utilisé, le choix de la liaison à CHAR est approprié dans la plupart des cas.

Types de données à virgule fixe

Ces types de données permettent de les utiliser pour stocker des valeurs monétaires et fournissent une prévisibilité pour les opérations de multiplication et de division.

Firebird propose deux types de données à virgule fixe : NUMERIC et DECIMAL.Selon la norme, les deux types limitent le nombre stocké à une échelle déclarée (le nombre de décimales).Cependant, l’approche de la contrainte de précision est différente pour les types : pour les colonnes NUMERIC, la précision est aussi quedéclaré", tandis que les colonnes `DECIMAL peuvent recevoir des nombres dont la précision est au moins égale à ce qui a été déclaré.

Par exemple, NUMERIC(4, 2) décrit un nombre composé d’un total de quatre chiffres dont 2 chiffres après la virgule ; total 2 chiffres avant la virgule, 2 après.Si vous écrivez une valeur de 3.1415 dans une colonne avec ce type de données, la colonne NUMERIC(4, 2) conservera la valeur 3.14.

Pour les données à virgule fixe, ce qui est commun est la forme de la déclaration, par exemple NUMERIC(p, s). Ce qu’il faut comprendre ici, c’est que dans cette entrée, "est l’échelle, et non le "nombre de décimales" intuitivement prévu.Pour "visualiser" le mécanisme de stockage des données, mémorisez vous-même la procédure :

  • Lors de la sauvegarde dans la base de données, le nombre est multiplié par 10 (10s), ce qui le transforme en un nombre entier ;

  • Lorsque les données sont lues, le nombre est reconverti en un nombre entier.

La manière dont les données sont physiquement stockées dans le SGBD dépend de plusieurs facteurs : la précision déclarée, le dialecte de la base de données et le type de déclaration.

Table 1. Une façon de stocker physiquement des nombres à virgule fixe
Précision Type de données Dialecte 1 Dialecte 3

1 - 4

NUMERIC

SMALLINT

SMALLINT

1 - 4

DECIMAL

INTEGER

INTEGER

5 - 9

NUMERIC ou DECIMAL

INTEGER

INTEGER

10 - 18

NUMERIC ou DECIMAL

DOUBLE PRECISION

BIGINT

19 - 38

NUMERIC ou DECIMAL

INT128

INT128