2010-03-04 53 views
181

Tengo la siguiente columna especificada en una base de datos: decimal (5,2)¿Cómo interpreto la precisión y la escala de un número en una base de datos?

¿Cómo se interpreta esto?

De acuerdo con las propiedades en la columna como se ve en el estudio SQL Server Management, puedo ver que significa: decimal (precisión numérica, escala numérica).

¿Qué significan la precisión y la escala en términos reales?

Sería fácil interpretar esto como un decimal con 5 dígitos y dos decimales lugares ... es decir, 12.345,12

P. S. Pude determinar la respuesta correcta de un colega, pero tuve una gran dificultad para encontrar una respuesta en línea. Como tal, me gustaría que la pregunta y la respuesta se documenten aquí en stackoverflow para futuras referencias.

Respuesta

300

La precisión numérica se refiere a la cantidad máxima de dígitos que están presentes en el número.

es decir 1.234.567,89 tiene una precisión de 9

escala numérica se refiere al número máximo de cifras decimales

es decir 123456.789 tiene una escala de 3

tanto, el valor máximo permitido para decimal (5, 2) es 999,99

+10

No se olvide que si usted está usando un sistema que le permite predefinir precisión y la escala de un insumo para un porcentaje en algo como Microsoft Access, debe considerar el porcentaje como forma de número entero. En este caso, el 25.5% requeriría una precisión de 4 y una escala de 3 (no uno) ya que debemos considerarlo como .255. Me encontré con este problema desde el principio y me quedé perplejo por un momento preguntándome por qué la escala 1 no funcionaba. –

+1

@mezoid ¿Qué significa un valor de escala negativo? – Geek

+0

@Geek Según http://technet.microsoft.com/en-us/library/ms187746.aspx La escala no puede ser menor que cero. 0 <= escala <= precisión. Esencialmente, un valor de escala negativa no tendría sentido. – mezoid

14

Precision, Scale, and Length en la documentación de SQL Server 2000 lee:

La precisión es el número de dígitos en un número. La escala es la cantidad de dígitos a la derecha del punto decimal en un número. Por ejemplo, el número 123.45 tiene una precisión de 5 y una escala de 2.

60

La precisión de un número es la cantidad de dígitos.

La escala de un número es el número de dígitos después del punto decimal.

Lo que generalmente se implica al establecer la precisión y la escala en la definición de campo es que representan valores máximos.

ejemplo, un campo decimal definido con precision=5 y scale=2 permitiría a los siguientes valores:

  • 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)

los siguientes valores no se les permite o podría causar una pérdida de datos:

  • 12.345 (p = 5, s = 3) => podría truncarse en 12.35 (p = 4, s = 2)
  • 1234.56 (p = 6, s = 2) => se puede truncar en 1234.6 (p = 5, s = 1)
  • 123.456 (p = 6, s = 3) => podría truncarse en 123.46 (p = 5, s = 2)
  • 123450 (p = 6, s = 0) => fuera de variar

Tenga en cuenta que el rango se define generalmente por la precisión: |value| < 10^p ...

+5

Tenga en cuenta que el servidor MS SQL no permitiría 12345 o 1234.56 porque "[escala] se resta de [precisión] para determinar el número máximo de dígitos a la izquierda del punto decimal". (fuente: [decimal y numérico] (http://technet.microsoft.com/en-us/library/ms187746.aspx)) –

+0

¿Qué tal '12345000'? Precisión 5 u 8? Si es 5, ¿con qué escala? Escala -3? – towi

+0

@towi ¿qué significa eso? Si quisieras almacenar eso, usarías 8,0. –

Cuestiones relacionadas