Il problema dell'arrotondamento in SQL
Arrotondamento convenzionale
La funzione SQL "ROUND ()" prende un valore esistente e lo arrotonda al numero indicato di cifre decimali. Il formato è il seguente:
ROUND ([valore], [n], [1]))
Qui, "[valore]" è un valore decimale e "[n]" è il numero di cifre a cui deve essere arrotondato il valore. Questa funzione arrotonda valori di 0, 5 o più e valori di 0, 49 o meno verso il basso. Scegliendo il valore "0" arrotonda a valori interi. Scegliendo il valore "-1" arrotonda il multiplo del 10 più vicino. Il terzo parametro della funzione "ROUND ()", "[1]", taglia il numero con il numero indicato di cifre decimali se viene scelto qualsiasi valore diverso da zero. Una fonte significativa di problemi di arrotondamento imprevisti è la fissazione del terzo parametro per errori tipografici, in cui il numero del risultato viene troncato anziché arrotondato.
PAVIMENTO e SOFFITTO
SQL utilizza la funzione "FLOOR ()" per forzare l'arrotondamento verso il basso dei valori al numero intero più vicino e la funzione "CEILING ()" per arrotondare al valore più vicino. Le due funzioni restituiscono valori interi. Anche utilizzando un tipo di dati mobile con un numero specificato di posizioni decimali, queste funzioni restituiscono un valore con zeri dopo la posizione decimale.
Tipi di dati raccomandati
Il motivo più probabile per la comparsa di errori di arrotondamento in SQL è l'utilizzo di un tipo di dati imprevisto per l'espressione numerica nella funzione "ROUND ()" o l'uso di "FLOOR ()" o "CEILING () "quando si prevede di ottenere un tipo di dati decimali anziché un numero intero. Se la funzione SQL ti offre risultati di arrotondamento imprevisti, assicurati che la funzione "CAST ()" che indica il numero abbia il tipo di dati "intero", "decimale", "denaro" o "smallmoney". Il tipo di dati "decimali" è limitato a solo 38 cifre in totale, una limitazione che colpisce poche persone al di fuori della comunità scientifica.
Altri tipi di dati
Esistono due tipi di dati che restituiscono valori numerici e che possono causare problemi con la funzione "ROUND ()". Sono i tipi numerici "reali" e "float" in SQL, che vengono utilizzati per archiviare le frazioni molto piccole che vengono arrotondate nella maggior parte delle versioni di SQL, con l'ultima cifra decimale nel tipo di dati indicato. Alcune implementazioni di SQL arrotondate a zero, in basso o convenzionalmente. Quando si ricevono dati in un database SQL che potrebbe utilizzare i tipi "reali" o "float", utilizzare le funzioni "CAST ()" o "CONVERT ()" per convertirli in tipi di dati "decimali".