Condividi tramite


float e real (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)Endpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft Fabric

Tipi di dati numerici approssimati da utilizzare con dati numerici a virgola mobile. I dati a virgola mobile sono approssimati. Pertanto, non tutti i valori nell'intervallo del tipo di dati possono essere rappresentati in modo esatto. Il sinonimo ISO per real è float(24).

Convenzioni relative alla sintassi Transact-SQL

Sintassi

float [ (n) ] dove n è il numero di bit usato per archiviare la mantissa del numero float in notazione scientifica e pertanto determina la precisione e le dimensioni di archiviazione. Se n è specificato, deve essere un valore tra 1 e 53. Il valore predefinito di n è 53.

Valore n Precisione Dimensioni dello spazio di archiviazione
1-24 7 cifre 4 byte
25-53 15 cifre 8 byte

Nota

SQL Server interpreta n come uno dei due valori possibili. Se 1<=n<=24, n viene interpretato come 24. Se 25<=n<=53, n viene interpretato come 53.

Il tipo di dati float[(n)] di SQL Server è conforme allo standard ISO per tutti i valori di n, da 1 a 53. Il sinonimo di double precision è float(53).

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere Documentazione delle versioni precedenti.

Osservazioni:

Tipo di dati Intervallo Storage
float Da - 1,79E+308 a -2,23E-308, 0 e da 2,23E-308 a 1,79E+308 Dipende dal valore di n
real Da - 3,40E + 38 a -1,18E - 38, 0 e da 1,18E - 38 a 3,40E + 38 4 byte

I tipi di dati float e real sono noti come tipi di dati approssimativi. Il comportamento di float e real segue la specifica IEEE 754 sui tipi di dati numerici approssimativi. Per comprendere in che modo il compilatore Microsoft Visual C (MSVC) usa lo standard IEEE 754, vedere Rappresentazione a virgola mobile IEEE

I tipi di dati numerici approssimativi non archiviano i valori esatti specificati per molti numeri; archiviano un'approssimazione ravvicinata del valore. Per alcune applicazioni, la piccola differenza tra il valore specificato e l'approssimazione archiviata non è rilevante. Per gli altri, tuttavia, la differenza è importante. A causa della natura approssimativa dei tipi di dati float e real, non usare questi tipi di dati quando è necessario un comportamento numerico esatto. Esempi che richiedono valori numerici precisi sono dati finanziari o aziendali, operazioni che coinvolgono l'arrotondamento o controlli di uguaglianza. In questi casi, usare i tipi di dati integer, decimal, numeric, money o smallmoney.

Evitare di usare colonne float o reali nelle condizioni di ricerca delle clausole WHERE, in particolare gli operatori = e <> . È consigliabile limitare colonne float e reali a > o < confronti.

Conversione dei dati di tipo float e real

I valori di float vengono troncati quando vengono convertiti in qualsiasi tipo integer.

Quando si vuole eseguire la conversione da float o real a dati di tipo carattere, l'uso della funzione stringa STR è in genere più utile rispetto a CAST( ). Il motivo è che STR() consente un maggiore controllo sulla formattazione. Per altre informazioni, vedere STR (Transact-SQL) e Funzioni (Transact-SQL).

Prima di SQL Server 2016 (13.x), la conversione dei valori float in decimal o numeric è limitata ai soli valori con precisione a 17 cifre. Qualsiasi valore float minore di 5E-18 (se impostato usando la notazione scientifica di 5E-18 o la notazione decimale di 0,000000000000000005) viene arrotondato per difetto a 0. Questa non è più una restrizione a partire da SQL Server 2016 (13.x).