2010-03-04 7 views
181

Ho la seguente colonna specificata in un database: decimale (5,2)Come interpreto la precisione e la scala di un numero in un database?

Come si interpreta questo?

In base alle proprietà sulla colonna, come visualizzato in SQL Server Management studio, posso vedere che significa: decimale (precisione numerica, scala numerica).

Cosa significano precisione e scala in termini reali?

Sarebbe facile interpretare questo come un decimale con 5 cifre decimali e due posti ... cioè 12345,12

P.S. Sono stato in grado di determinare la risposta corretta da un collega, ma ho avuto grandi difficoltà a trovare una risposta online. Come tale, mi piacerebbe avere la domanda e la risposta documentate qui su StackOverflow per riferimento futuro.

risposta

300

La precisione numerica si riferisce al numero massimo di cifre presenti nel numero.

cioè 1.234.567,89 ha una precisione di 9

scala numerica indica il numero massimo di cifre decimali

cioè 123456,789 ha una scala di 3

Così il valore massimo consentito per decimale (5, 2) è 999,99

+10

Non dimenticare che se si sta utilizzando un sistema che ti permette di controllare la validità di definire la precisione e la scala di un ingresso per una percentuale in qualcosa di simile a Microsoft Access, è necessario considerare la percentuale come forma di numero intero. In questo caso, il 25,5% richiederebbe precisione 4 e scala 3 (non uno) poiché dobbiamo considerarlo come .255. Mi sono imbattuto molto presto in questo problema e sono rimasto perplesso per un po 'chiedendomi perché la scala 1 non funzionava. –

+1

@mezoid Che cosa significa un valore di scala negativo? – Geek

+0

@Geek Secondo http://technet.microsoft.com/en-us/library/ms187746.aspx La scala non può essere inferiore a zero. 0 <= scala <= precisione. In sostanza, un valore di scala negativo sarebbe privo di significato. – mezoid

14

Precision, Scale, and Length nella documentazione di SQL Server 2000 recita:

Precisione è il numero di cifre in un numero. Scala è il numero di cifre a destra del punto decimale in un numero. Ad esempio, il numero 123.45 ha una precisione di 5 e una scala di 2.

60

Precisione di un numero è il numero di cifre.

La scala di un numero è il numero di cifre dopo il punto decimale.

Ciò che è generalmente implicito quando si imposta la precisione e la scala sulla definizione del campo è che rappresentano i valori massimi .

Esempio, un campo decimale definito con precision=5 e scale=2 consentirebbe i seguenti valori:

  • 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)
  • 01.235.164,106174 millions

I seguenti valori non sono consentiti o potrebbero causare una perdita di dati:

  • 12.345 (p = 5, s = 3) => potrebbe essere troncato in 12.35 (p = 4, s = 2)
  • 1234.56 (p = 6, s = 2) => potrebbero essere troncati in 1234.6 (p = 5, s = 1)
  • 123.456 (p = 6, s = 3) => potrebbe essere troncato in 123.46 (p = 5, s = 2)
  • 123450 (p = 6, s = 0) => fuori variare

nota che la gamma è generalmente definito dalla precisione: |value| < 10^p ...

+5

Si noti che MS SQL Server non consente 12345 o 1234.56 perché "[scala] viene sottratto da [precisione] per determinare il numero massimo di cifre a sinistra del punto decimale." (fonte: [decimale e numerico] (http://technet.microsoft.com/en-us/library/ms187746.aspx)) –

+0

Che dire di '12345000'? Precisione 5 o 8? Se 5, con quale scala? Scala -3? – towi

+0

@towi cosa significa? Se si desidera archiviare ciò, si utilizzerà 8,0. –

Problemi correlati