FirebirdSQL logo

Types décimales à virgule flottante

Les types de nombres décimaux à virgule flottante sont supportés à partir de Firebird 4.0.

DECFLOAT

DECFLOAT est un type numérique de la norme SQL:2016 qui stocke exactementdes nombres à virgule flottante. À la différence de DECFLOAT, les types FLOAT ou DOUBLE PRECISION.fournissent une approximation binaire de la précision voulue.

Firebird, conformément à la norme IEEE 754-1985 (IEEE 754-2008), met en œuvre les typesDECIMAL64 (DECFLOAT(16)) et DECIMAL128 (DECFLOAT(34)).

Tous les calculs intermédiaires sont effectués à l’aide d’un code à 34 chiffres.valeurs.

16 chiffres et 34 chiffres

“16” et “34” font référence à la précision maximale des chiffres décimaux.

Voir https://fr.wikipedia.org/wiki/IEEE_754 pour une description détaillée.

Syntaxe
DECFLOAT[(precision)]

precision ::= 16 | 34
Table 1. Plage de valeurs `DECFLOAT'
Type Précision maximale Exponent minimal Exposant maximal Valeur la plus basse Valeur maximale

DECFLOAT(16)

16

-383

+384

1E-398

9.9..9E+384

DECFLOAT(34)

34

-6143

+6144

1E-6176

9.9..9E+6144

Notez que bien que le plus petit exposant de DECFLOAT (16) soit -383, la plus petite valeur a l’exposant -398, soit 15 chiffres de moins.Et de même, pour DECFLOAT (34), le plus petit exposant est -6143, mais la plus petite valeur a un exposant de degré -6176, soit 33 chiffres de moins.La raison en est que la précision a été "sacrifiée" afin de pouvoir stocker une valeur plus petite.

C’est le résultat de la façon dont la valeur est stockée : comme une valeur décimale de 16 ou 34 chiffres et l’exposant.Par exemple, 1.234567890123456e-383 est en fait stocké comme quotient 1234567890123456 et exposant -398,et 1E-398 est retenu comme multiplicateur de 1, exposant de degré -398.

Le type DECFLOAT doit être utilisé si vous avez besoin de calculer et de stocker des nombres avec une grande précision.

Example 1. Utilisation du type DECFLOAT lors de la définition d’une table
CREATE TABLE StockPrice (
  id    INT NOT NULL PRIMARY KEY,
  stock DECFLOAT(16),
  ...
);
Example 2. Utilisation du type DECFLOAT en PSQL
DECLARE VARIABLE v DECFLOAT(34);