2010-03-04 2 views
181

J'ai la colonne suivante spécifiée dans une base de données: decimal (5,2)Comment interpréter la précision et l'échelle d'un nombre dans une base de données?

Comment interprète-t-on cela? Selon les propriétés de la colonne affichées dans SQL Server Management Studio, cela signifie: décimal (précision numérique, échelle numérique). Qu'est-ce que la précision et l'échelle signifient en termes réels?

Il serait facile d'interpréter cela comme une décimale avec 5 chiffres et deux décimales ... soit 12345,12

post-scriptum 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, je voudrais avoir la question et la réponse documentée ici sur stackoverflow pour référence future.

Répondre

300

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

-à-dire 1.234.567,89 a une précision de 9

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

-à-dire 123456,789 a une échelle de 3

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

+10

Ne pas oublier 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 son nombre entier. Dans ce cas, 25,5% nécessiterait une précision 4 et une échelle de 3 (pas un), car nous devons considérer cela comme .255. Je suis tombé sur ce problème très tôt et j'ai été perplexe pendant un moment en me demandant pourquoi l'échelle 1 ne fonctionnait pas. –

+1

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

+0

@Geek Selon http://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 serait dénuée de sens. – mezoid

14

Precision, Scale, and Length dans la documentation SQL Server 2000 se lit comme suit:

La précision est le nombre de chiffres d'un nombre. Echelle 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.

60

La précision d'un nombre est le nombre de chiffres.

L'échelle d'un nombre est le nombre de chiffres après la virgule décimale. Ce qui est généralement implicite 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 valeurs maximales.

exemple, un champ décimal défini avec precision=5 et scale=2 permettrait aux 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és ou entraînerait une perte de données:

  • 12.345 (p = 5, s = 3) => pourrait être tronqué dans 12.35 (p = 4, s = 2)
  • 1234.56 (p = 6, s = 2) => pourrait être tronqué dans 1234.6 (p = 5, s = 1)
  • 123.456 (p = 6, s = 3) => pourrait être tronqué dans 123.46 (p = 5, s = 2)
  • 123450 (p = 6, s = 0) => sur gamme

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

+5

Notez que MS SQL Server n'autorise pas 12345 ou 1234.56 car "[scale] est soustrait de [precision] pour déterminer le nombre maximal de chiffres à gauche du séparateur décimal". (source: [décimal et numérique] (http://technet.microsoft.com/en-us/library/ms187746.aspx)) –

+0

Que diriez-vous de '12345000'? Précision 5 ou 8? Si 5, avec quelle échelle? Échelle -3? – towi

+0

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

Questions connexes