Compartilhar via


flutuante e real (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW) Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric Banco de Dados SQL no Microsoft Fabric

Tipos de dados numéricos aproximados para uso com dados numéricos de ponto flutuante. Os dados de ponto flutuante são aproximados; portanto, nem todos os valores no intervalo de tipo de dados podem ser representados de maneira exata. O sinônimo ISO de real é float(24) .

Convenções de sintaxe de Transact-SQL

Sintaxe

float [ (n) ] em que n é o número de bits usado para armazenar a mantissa do número float na notação científica e, portanto, exige a precisão e o tamanho do armazenamento. Se n for especificado, ele precisará ser um valor entre 1 e 53. O valor padrão de n é 53.

Valor de n Precisão Tamanho de armazenamento
1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

Observação

SQL Server trata n como um dos dois valores possíveis. Se 1<=n<=24, n é trado como 24. Se 25<=n<=53, n é trado como 53.

O tipo de dados SQL Server float[ (n) ] está em conformidade com o padrão ISO para todos os valores de n de 1 a 53. O sinônimo de double precision é float(53) .

Comentários

Tipo de dados Intervalo Armazenamento
float - 1,79E+308 a -2,23E-308, 0 e 2,23E-308 a 1,79E+308 Depende do valor de n
real - 3,40E + 38 a -1,18E - 38, 0 e 1,18E - 38 a 3,40E + 38 4 bytes

Os tipos de dados float e real são conhecidos como tipos de dados aproximados. O comportamento de float e real segue a especificação IEEE 754 em tipos de dados numéricos aproximados. Para entender como o compilador Microsoft Visual C (MSVC) usa o padrão IEEE 754, consulte Representação de ponto flutuante IEEE

Os tipos de dados numéricos aproximados não armazenam os valores exatos especificados para muitos números; eles armazenam uma aproximação do valor. Para alguns aplicativos, a pequena diferença entre o valor especificado e a aproximação armazenada não é relevante. Para outros, porém, a diferença é importante. Devido à natureza aproximada dos tipos de dados float e real, não use esses tipos de dados quando o comportamento numérico exato for necessário. Exemplos que exigem valores numéricos precisos são dados financeiros ou comerciais, operações envolvendo arredondamento ou verificações de igualdade. Nesses casos, use os tipos de dados inteiro, decimal, numérico, money ou smallmoney.

Evite usar colunas float ou reais em condições de pesquisa de cláusulas WHERE, especialmente os operadores = e <> . É melhor limitar as colunas flutuantes e reais a > ou < comparações.

Convertendo dados float e real

Os valores de float são truncados quando são convertidos em qualquer tipo inteiro.

Quando você deseja converter dados flutuantes ou reais em caracteres, usar a função de string STR geralmente é mais útil do que CAST( ). O motivo é que STR() permite mais controle sobre a formatação. Para obter mais informações, confira STR (Transact-SQL) e Funções (Transact-SQL).

Antes do SQL Server 2016 (13.x), a conversão de valores float para decimal ou numeric era restrita somente a valores com precisão de 17 dígitos. Qualquer valor float menor que 5E-18 (quando definido usando a notação científica de 5E-18 ou a notação decimal de 0,000000000000000005) é arredondado para 0. Essa não é mais uma restrição no SQL Server 2016 (13.x) em diante.