Jak zaokrąglić w dół do najbliższej liczby całkowitej w MySQL?

84

Jak zaokrąglić w dół do najbliższej liczby całkowitej w MySQL?

Przykład: 12345.7344 rounds to 12345

round()Funkcja mysql zaokrągla w górę.

Nie wiem, jak długie będą wartości ani miejsca po przecinku, może to być 10 cyfr z 4 miejscami po przecinku, może to być 2 cyfry z 7 miejscami po przecinku.

d -_- b
źródło
Twój przykład NIE zaokrągla do najbliższej liczby całkowitej!
Patrick Honorez
1
@PatrickHonorez Twój komentarz dotyczy pytania sprzed 5 lat i wydaje się, że źle go zrozumiał. OP prosi o funkcję zaokrągleń w DÓŁ do najbliższej liczby całkowitej.
Warren Sergent
@WarrenSergent rzeczywiście: - /
Patrick Honorez

Odpowiedzi:

119

Użyj FLOOR :

SELECT FLOOR(your_field) FROM your_table
Jocelyn
źródło
Dziękuję Ci. Patrzył mi w twarz przez cały czas, gdy czytałem o round ().
d -_- b
Ok, usunąłem ten komentarz, próbowałem tego i zwróciło 0, gdy FLOOR()była różnica między 2 podzapytaniami (różnica w podzapytaniach wynosiła -70,00) ... czy kiedykolwiek widziałeś to wcześniej?
stephen
46

Użyj funkcji FLOOR () , jeśli chcesz zaokrąglić liczbę dziesiętną do niższej liczby całkowitej. Przykłady:

FLOOR(1.9) => 1
FLOOR(1.1) => 1

Użyj ROUND () , jeśli chcesz zaokrąglić liczbę dziesiętną do najbliższej liczby całkowitej. Przykłady:

ROUND(1.9) => 2
ROUND(1.1) => 1

Użyj CEIL () , jeśli chcesz zaokrąglić liczbę dziesiętną do górnej liczby całkowitej. Przykłady:

CEIL(1.9) => 2
CEIL(1.1) => 2
Luca Fagioli
źródło
4
SELECT FLOOR(12345.7344);

Przeczytaj więcej tutaj .

hjpotter92
źródło
3

SUBSTRbędzie lepszy niż FLOORw niektórych przypadkach, ponieważ FLOOR ma następujący „błąd”:

SELECT 25 * 9.54 + 0.5 -> 239.00

SELECT FLOOR(25 * 9.54 + 0.5) -> 238  (oops!)

SELECT SUBSTR((25*9.54+0.5),1,LOCATE('.',(25*9.54+0.5)) - 1) -> 239
Gość
źródło
2
Właśnie przetestowałem SELECT FLOOR (25 * 9,54 + 0,5) na MySQL 5.6.40 i zwraca 239.
Winter Dragoness
1

Można to zrobić na dwa sposoby:

  • select floor(desired_field_value) from table
  • select round(desired_field_value-0.5) from table

Wyjaśnienie drugiego sposobu: Załóżmy, że liczba całkowita 12345,7344. Zatem 12345,7344 - 0,5 = 12345,2344, a zaokrąglenie wyniku wyniesie 12345.

Ananya Verma
źródło
0

Spróbuj tego,

SELECT SUBSTR(12345.7344,1,LOCATE('.', 12345.7344) - 1)

lub

SELECT FLOOR(12345.7344)

SQLFiddle Demo

John Woo
źródło
0

jeśli potrzebujesz ułamków dziesiętnych, możesz to wykorzystać

DECLARE @Num NUMERIC(18, 7) = 19.1471985
SELECT FLOOR(@Num * 10000) / 10000

Wyjście: 19.147100 Wyczyść: 985 Dodać: 00

LUB użyj tego:

SELECT SUBSTRING(CONVERT(VARCHAR, @Num), 1, CHARINDEX('.', @Num) + 4)

Wyjście: 19.1471 Clear: 985

VolkanCetinkaya
źródło