Utilizzo dei tipi di dati decimal, float e real

Il tipo di dati decimal consente di archiviare fino a 38 cifre, che possono corrispondere tutte a cifre decimali, ovvero a destra del separatore decimale. Nel tipo di dati decimal viene archiviata la rappresentazione esatta del numero, senza alcuna approssimazione.

I due attributi che definiscono le colonne, le variabili e i parametri di tipo decimal sono i seguenti:

  • p

    Specifica il grado di precisione, ovvero il numero di cifre che possono essere archiviate nell'oggetto.

  • s

    Specifica la scala, ovvero il numero di cifre che è possibile visualizzare a destra della virgola.

    È necessario che p e s rispettino la regola seguente: 0 <= s <= p <= 38.

La precisione massima predefinita dei tipi di dati numeric e decimal è 38. In Transact-SQL, il tipo di dati numeric è equivalente dal punto di vista funzionale al tipo di dati decimal.

Utilizzare il tipo di dati decimal per archiviare numeri decimali quando è necessario archiviare i valori dei dati esattamente come specificato.

Per ulteriori informazioni sugli effetti delle operazioni matematiche sulla precisione e sulla scala dei risultati, vedere Precisione, scala e lunghezza (Transact-SQL).

Utilizzo del tipo di dati float e real

I tipi di dati float e real sono tipi di dati approssimati. Il funzionamento dei tipi di dati float e real segue la specifica IEEE 754 relativa ai tipi di dati numerici approssimati.

I tipi di dati numerici approssimati in molti casi non consentono di archiviare il valore esatto specificato. Vi viene archiviata tuttavia un'approssimazione molto vicina al valore specificato. In molte applicazioni, la differenza minima fra il valore specificato e l'approssimazione archiviata non è significativa. In alcuni casi, tuttavia, la differenza è rilevante. A causa della natura approssimata dei tipi di dati float e real, è consigliabile evitare di utilizzarli quando è necessario ottenere calcoli numerici esatti, ad esempio nelle applicazioni di tipo finanziario, nelle operazioni che comportano arrotondamenti o nei controlli di uguaglianze. In alternativa, utilizzare i tipi di dati decimal, money e smallmoney.

Evitare l'utilizzo di colonne di tipo float o real nelle condizioni di ricerca delle clausole WHERE, in particolare con gli operatori = e <>. È consigliabile limitare l'utilizzo delle colonne di tipo float e real ai confronti di tipo > o <.

Nella specifica IEEE 754 sono previste quattro modalità di arrotondamento, ovvero al valore più prossimo, per eccesso, per difetto e a zero. In Microsoft SQL Server viene utilizzato l'arrotondamento per eccesso. Le quattro modalità offrono il grado di precisione garantito, ma restituiscono valori a virgola mobile leggermente diversi. Poiché per la rappresentazione binaria di un numero a virgola mobile è possibile utilizzare diversi schemi di arrotondamento validi, non è possibile quantificare in modo affidabile un valore a virgola mobile.