Problema de rotunjire în SQL

SQL are trei funcții de rotunjire.

Încărcarea convențională

Funcția "ROUND ()" SQL ia o valoare existentă și o rotunjează la numărul indicat de zecimale. Formatul este după cum urmează:

ROUND ([valoare], [n], [1]))

Aici, "[value]" este o valoare zecimal, iar "[n]" este numărul de cifre la care valoarea trebuie rotunjită. Această funcție globalizează valori de 0, 5 sau mai mult și valori de 0, 49 sau mai puțin în jos. Alegerea valorii "0" la valori întregi. Alegerea valorii "-1" rotunde la multiplul celui mai apropiat 10. Al treilea parametru al funcției "ROUND ()", "[1]", taie numărul cu numărul de zecimale indicat dacă este aleasă o valoare diferită de zero. O sursă semnificativă de probleme de rotunjire neașteptate este fixarea celui de-al treilea parametru prin erori tipografice, prin care numărul de rezultate este trunchiat în loc de rotunjit.

FLOOR și plafonul

SQL utilizează funcția "FLOOR ()" pentru a forța rotunjirea în jos a valorilor la cel mai apropiat număr întreg, iar funcția "CEILING ()" se rotunjește până la cea mai apropiată valoare. Cele două funcții returnează valorile întregi. Chiar și utilizând un tip de date plutitoare cu un număr specificat de zecimale, aceste funcții returnează o valoare cu zerouri după poziția zecimală.

Tipurile de date recomandate

Motivul cel mai probabil pentru apariția erorilor de rotunjire în SQL este utilizarea unui tip de date neașteptat pentru expresia numerică în funcția "ROUND ()" sau utilizarea "FLOOR ()" sau "CEILING () "când vă așteptați să obțineți un tip de date zecimal în loc de un întreg. Dacă funcția dvs. SQL dă rezultate neașteptate de rotunjire, asigurați-vă că funcția "CAST ()" care indică numărul are tipul de date "integer", "decimal", "money" sau "smallmoney". Tipul de date "zecimal" este limitat la doar 38 de cifre în total, o limitare care afectează puțini oameni din afara comunității științifice.

Alte tipuri de date

Există două tipuri de date care returnează valori numerice și care pot cauza probleme cu funcția "ROUND ()". Acestea sunt tipurile numerice "real" și "float" din SQL, care sunt utilizate pentru a stoca fracțiuni foarte mici care sunt rotunjite în majoritatea versiunilor SQL, cu ultima zecimală în tipul de date indicat. Unele implementări ale rundei SQL la zero, în jos sau convențional. Când primiți date într-o bază de date SQL care poate utiliza tipurile "real" sau "float", utilizați funcțiile "CAST ()" sau "CONVERT ()" pentru a le converti în tipuri de date "zecimale".