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.


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

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


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

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.



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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.