Próbuję ustalić najlepszy sposób obcięcia lub upuszczenia dodatkowych miejsc dziesiętnych w SQL bez zaokrąglania. Na przykład:
declare @value decimal(18,2)
set @value = 123.456
Spowoduje to automatyczne runda @value
się 123.46
, co jest dobre w większości przypadków. Jednak do tego projektu nie potrzebuję tego. Czy istnieje prosty sposób na obcięcie ułamków dziesiętnych, których nie potrzebuję? Wiem, że mogę korzystać z left()
funkcji i konwertować z powrotem na dziesiętne. Czy są jakieś inne sposoby?
sql
sql-server
tsql
rounding
Ryan Eastabrook
źródło
źródło
Gdy trzeci parametr ! = 0 , obcina się, a nie zaokrągla
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
Składnia
Argumenty
numeric_expression
Jest wyrażeniem dokładnej liczbowej lub przybliżonej kategorii danych liczbowych, z wyjątkiem typu danych bitowych.length
Jest precyzją, do której należy zaokrąglić wyrażenie liczbowe. długość musi być wyrażeniem typu tinyint, smallint lub int. Gdy długość jest liczbą dodatnią, wyrażenie numeryczne jest zaokrąglane do liczby miejsc dziesiętnych określonych przez długość. Gdy długość jest liczbą ujemną, wyrażenie liczbowe jest zaokrąglane po lewej stronie przecinka, zgodnie z długością.function
Jest typem operacji do wykonania. funkcja musi być tinyint, smallint lub int. Gdy funkcja jest pominięta lub ma wartość 0 (domyślnie), wyrażenie numeryczne jest zaokrąglane. Jeśli podano wartość inną niż 0, wyrażenie numeryczne jest obcinane.źródło
źródło
Oto sposób, w jaki mogłem obciąć, a nie zaokrąglić:
zwraca 100,0010
I twój przykład:
zwraca 123,450
Teraz, jeśli chcesz pozbyć się końcowego zera, po prostu rzuć:
zwraca 123,45
źródło
W rzeczywistości, niezależnie od trzeciego parametru, 0, 1 lub 2, nie zaokrągli on twojej wartości.
źródło
Runda ma opcjonalny parametr
źródło
Chcesz przecinek dziesiętny czy nie?
Jeśli nie, użyj
Jeśli zrobisz to z 0, zrób rundę:
źródło
Kolejne obcinanie bez rozwiązania zaokrąglania i przykład.
źródło
Floor()
którego jest to sposób na opuszczanie miejsc po przecinku bez zaokrąglania. Szkoda, że Floor () nie ma drugiego parametru wskazującego, w której pozycji. Ale myślę, że * 10) / 10 rzeczywiście działa całkiem dobrze.Spowoduje to usunięcie części dziesiętnej dowolnej liczby
źródło
Dałby 2 wartości po przecinku. (MS SQL SERVER)
źródło
Innym sposobem jest
ODBC TRUNCATE
funkcja:LiveDemo
Wynik:
Uwaga:
Polecam użycie wbudowanej
ROUND
funkcji z 3. parametrem ustawionym na 1.źródło
Wiem, że jest już dość późno, ale nie widzę w tym odpowiedzi i od lat używam tej sztuczki.
Po prostu odejmij 0,005 od swojej wartości i użyj Round (@ num, 2).
Twój przykład:
zwraca 123,45
Automatycznie dostosuje zaokrąglenie do prawidłowej wartości, której szukasz.
Nawiasem mówiąc, czy odtwarzasz program z filmu Office Space?
źródło
Spróbuj użyć tego kodu do konwersji 3 wartości dziesiętnych po kropce na 2 miejsca dziesiętne:
Dane wyjściowe to 123,46
źródło
Myślę, że chcesz tylko wartość dziesiętną, w tym przypadku możesz użyć następujących opcji:
źródło
Wiem, że to pytanie jest naprawdę stare, ale nikt nie używał podciągów do zaokrąglania. Zaletą jest możliwość zaokrąglania naprawdę długich liczb (limit ciągu znaków w serwerze SQL, który zwykle wynosi 8000 znaków):
źródło
Myślę, że możemy przejść o wiele łatwiej dzięki prostszemu przykładowemu rozwiązaniu znalezionemu w Hackerrank:
Rozwiązanie powyżej daje wyobrażenie, jak po prostu ograniczyć wartość do 4 miejsc po przecinku. Jeśli chcesz obniżyć lub zwiększyć liczby po przecinku, po prostu zmień 4 na dowolne.
źródło
Mod(x,1)
to najłatwiejszy sposób.źródło
źródło