J'ai la colonne suivante spécifiée dans une base de données: décimal (5,2)
Comment interprète-t-on cela?
Selon les propriétés de la colonne vues dans SQL Server Management Studio, je peux voir que cela signifie: décimal (précision numérique, échelle numérique).
Que signifient en termes réels la précision et l'échelle?
Il serait facile d'interpréter cela comme une décimale avec 5 chiffres et deux décimales ... ie 12345.12
PS J'ai pu déterminer la bonne réponse d'un collègue mais j'ai eu beaucoup de mal à trouver une réponse en ligne. En tant que tel, j'aimerais que la question et la réponse soient documentées ici sur stackoverflow pour référence future.
La précision d'un nombre est le nombre de chiffres.
L'échelle d'un nombre est le nombre de chiffres après le point décimal.
Ce qui est généralement impliqué lors de la définition de la précision et de l'échelle sur la définition de champ, c'est qu'ils représentent des valeurs maximales .
Exemple, un champ décimal défini avec
precision=5
etscale=2
autoriserait les valeurs suivantes:123.45
(p = 5, s = 2)12.34
(p = 4, s = 2)12345
(p = 5, s = 0)123.4
(p = 4, s = 1)0
(p = 0, s = 0)Les valeurs suivantes ne sont pas autorisées ou entraîneraient une perte de données:
12.345
(p = 5, s = 3) => pourrait être tronqué en12.35
(p = 4, s = 2)1234.56
(p = 6, s = 2) => pourrait être tronqué en1234.6
(p = 5, s = 1)123.456
(p = 6, s = 3) => pourrait être tronqué en123.46
(p = 5, s = 2)123450
(p = 6, s = 0) => hors limitesNotez que la plage est généralement définie par la précision:
|value| < 10^p
...la source
12345000
? Précision 5 ou 8? Si 5, avec quelle échelle? Échelle -3?123450 (p=6,s=0)
hors de portée? 123450 a 6 chiffres et aucun chiffre après un point?123450 (p=6,s=0)
serait hors de portée pour un champ décimal avec une précision de 5 (comme mentionné dans l'exemple). Parce que la précision d'un nombre que vous souhaitez stocker dans un champ doit être inférieure ou égale à la précision du champ.Précision, échelle et longueur dans la documentation de SQL Server 2000:
la source