Problem zaokrąglania w SQL
Konwencjonalne zaokrąglanie
Funkcja "ROUND ()" SQL przyjmuje istniejącą wartość i zaokrągla ją do wskazanej liczby miejsc dziesiętnych. Format jest następujący:
ROUND ([wartość], [n], [1]))
Tutaj "[wartość]" jest wartością dziesiętną, a "[n]" jest liczbą cyfr, do których wartość powinna zostać zaokrąglona. Ta funkcja zaokrągla wartości o wartości 0, 5 lub więcej, a wartości 0, 49 lub mniej w dół. Wybór wartości "0" zaokrągla do całych wartości. Wybranie wartości "-1" zaokrągla do wielokrotności najbliższych 10. Trzeci parametr funkcji "ROUND ()", "[1]", wycina liczbę ze wskazaną liczbą miejsc dziesiętnych, jeśli wybrana zostanie dowolna wartość niezerowa. Istotnym źródłem nieoczekiwanych problemów z zaokrąglaniem jest utrwalenie trzeciego parametru przez błędy drukarskie, przy czym numer wyniku jest obcinany zamiast zaokrąglany.
PODŁOGA i SUFIT
SQL używa funkcji "FLOOR ()", aby wymusić zaokrąglenie w dół wartości do najbliższej liczby całkowitej, oraz funkcję "CEILING ()", aby zaokrąglić do najbliższej wartości. Obie funkcje zwracają wartości całkowite. Nawet używając pływającego typu danych z określoną liczbą miejsc dziesiętnych, te funkcje zwracają wartość zerową po pozycji dziesiętnej.
Rodzaje zalecanych danych
Najbardziej prawdopodobną przyczyną pojawienia się błędów zaokrąglania w SQL jest użycie nieoczekiwanego typu danych dla wyrażenia liczbowego w funkcji "ROUND ()" lub użycie "FLOOR ()" lub "CEILING () "kiedy spodziewasz się uzyskać dziesiętny typ danych zamiast liczby całkowitej. Jeśli funkcja SQL daje nieoczekiwane wyniki zaokrąglania, upewnij się, że funkcja "CAST ()" wskazująca numer ma typ danych "integer", "decimal", "money" lub "smallmoney". Typ danych "dziesiętnych" jest ograniczony do jedynie 38 cyfr, co ogranicza liczbę osób spoza środowiska naukowego.
Inne rodzaje danych
Istnieją dwa typy danych, które zwracają wartości liczbowe i które mogą powodować problemy z funkcją "ROUND ()". Są to "rzeczywiste" i "zmienne" typy liczbowe w SQL, które służą do przechowywania bardzo małych frakcji, które są zaokrąglane w większości wersji SQL, z ostatnim miejscem dziesiętnym we wskazanym typie danych. Niektóre implementacje SQL są zaokrąglane do zera, w dół lub konwencjonalnie. Gdy otrzymujesz dane w bazie danych SQL, które mogą używać typów "rzeczywistych" lub "ruchomych", użyj funkcji "CAST ()" lub "CONVERT ()", aby przekonwertować je na "dziesiętne" typy danych.