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.
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 |