Compartilhar via


decimal e numeric (Transact-SQL)

Tipos de dados numéricos que têm precisão e escala fixos.

  • decimal [ **(**p[ **,**s] )] e numeric[ **(**p[ **,**s] )]
    Números de precisão e escala fixos. Quando a precisão máxima for usada, os valores válidos serão de - 10^38 +1 a 10^38 - 1. Os sinônimos de ISO para decimal são dec e dec(p, s). numeric é funcionalmente equivalente a decimal.

  • p (precisão)
    O número máximo total de dígitos decimais que poderão ser armazenados, à esquerda e à direita do ponto decimal. A precisão deve ser um valor de 1 até a precisão máxima de 38. A precisão padrão é 18.

  • s (escala)
    O número máximo de dígitos decimais que poderão ser armazenados à direita do ponto decimal. Esse número é subtraído de p para determinar o número máximo de dígitos à esquerda da casa decimal. A escala deve ser um valor de 0 a p. A escala somente poderá ser especificada se precisão também o for. A escala padrão é 0; portanto, 0 <= s < = p. Os tamanhos máximos de armazenamento variam, com base na precisão.

    Precisão

    Bytes de armazenamento

    1 - 9

    5

    10-19

    9

    20-28

    13

    29-38

    17

Convertendo dados decimal e numeric

Para os tipos de dados decimal e numeric, o SQL Server considera cada combinação específica de precisão e escala como um tipo de dados diferente. Por exemplo, decimal(5,5) e decimal(5,0) são considerados tipos de dados diferentes.

Nas instruções do Transact-SQL, uma constante com um ponto decimal é convertida automaticamente em um valor de dados numeric, usando a escala e a precisão mínimas necessárias. Por exemplo, a constante 12.345 é convertida em um valor numeric com uma precisão 5 e uma escala 3.

A conversão de decimal ou numeric em float ou real pode causar uma perda de precisão. A conversão de int, smallint, tinyint, float, real, money ou smallmoney em decimal ou numeric pode provocar estouro.

Por padrão, o SQL Server usa arredondamento ao converter um número em um valor decimal ou numeric com precisão e escala inferiores. Porém, se a opção SET ARITHABORT for ON, o SQL Server irá gerar um erro quando acontecer o estouro. Apenas a perda de precisão e escala não é suficiente para gerar um erro.

Ao converter valores reais ou flutuantes em valores decimais ou numéricos, o valor decimal nunca terá mais de 17 decimais. Qualquer valor flutuante < 5E-18 será sempre convertido em 0.

Consulte também

Referência

ALTER TABLE (Transact-SQL)

CAST e CONVERT (Transact-SQL)

CREATE TABLE (Transact-SQL)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)