Comment interpréter la précision et l'échelle d'un nombre dans une base de données?


245

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.

Réponses:


397

La précision numérique fait référence au nombre maximal de chiffres présents dans le nombre.

ie 1234567.89 a une précision de 9

L'échelle numérique fait référence au nombre maximum de décimales

ie 123456.789 a une échelle de 3

Ainsi, la valeur maximale autorisée pour la décimale (5,2) est 999,99


14
N'oubliez pas que si vous utilisez un système qui vous permet de prédéfinir la précision et l'échelle d'une entrée pour un pourcentage dans quelque chose comme Microsoft Access, vous devez considérer le pourcentage comme sa forme de nombre entier. Dans ce cas, 25,5% nécessiterait une précision de 4 et une échelle de 3 (pas un) car nous devons le considérer comme étant de 0,255. J'ai rencontré ce problème dès le début et j'ai été perplexe pendant un moment en me demandant pourquoi l'échelle 1 ne fonctionnait pas.
Ashton Sheets

1
@mezoid Que signifie une valeur d'échelle négative?
Geek

@Geek Selon technet.microsoft.com/en-us/library/ms187746.aspx L'échelle ne peut pas être inférieure à zéro. 0 <= échelle <= précision. Essentiellement, une valeur d'échelle négative n'aurait aucun sens.
mezoid


1
Ne devrait-il pas être: "La précision numérique fait référence au nombre maximum de chiffres pouvant être présents dans le nombre."? Le nombre exact 123,5 pourrait également être de précision 10, mais il n'y a plus de chiffres à ajouter. Ou cela deviendrait-il 123.5000000?
Chris311

86

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=5et scale=2autoriserait 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é en 12.35(p = 4, s = 2)
  • 1234.56(p = 6, s = 2) => pourrait être tronqué en 1234.6(p = 5, s = 1)
  • 123.456(p = 6, s = 3) => pourrait être tronqué en 123.46(p = 5, s = 2)
  • 123450 (p = 6, s = 0) => hors limites

Notez que la plage est généralement définie par la précision: |value| < 10^p...


5
Notez que MS SQL Server n'autoriserait pas 12345 ou 1234.56 car "[l'échelle] est soustrait de [précision] pour déterminer le nombre maximal de chiffres à gauche du séparateur décimal." (source: décimal et numérique )
molnarm

Et alors 12345000? Précision 5 ou 8? Si 5, avec quelle échelle? Échelle -3?
2015 à 14h11

@towi qu'est-ce que cela signifie? Si vous vouliez stocker cela, vous utiliseriez 8,0.
Rob Grant

Belle réponse, mais pourquoi est 123450 (p=6,s=0)hors de portée? 123450 a 6 chiffres et aucun chiffre après un point?
Matthias Burger

1
@MatthiasBurger 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.
Snozzlebert

26

Précision, échelle et longueur dans la documentation de SQL Server 2000:

La précision est le nombre de chiffres d'un nombre. L'échelle est le nombre de chiffres à droite de la virgule décimale d'un nombre. Par exemple, le nombre 123,45 a une précision de 5 et une échelle de 2.


Je vous remercie. Je viens de réaliser qu'un morceau de code Delphi / Pascal utilisait une échelle de 0 pour couper la partie décimale de float
peterchaula
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.