Як округлити до найближчого цілого числа в MySQL?


83

Як би я округлив до найближчого цілого числа в MySQL?

Приклад: 12345.7344 rounds to 12345

round()Функція mysql округлюється.

Я не знаю, як довго будуть значення, а також десяткові коми, може бути 10 цифр з 4 знаками після коми, може бути 2 цифри з 7 знаками після коми.


Ваш приклад НЕ округляє до найближчого цілого числа!
Patrick Honorez

1
@PatrickHonorez Ваш коментар стосується 5-річного Запитання і, схоже, неправильно зрозумів Запитання. ОП запитує функцію для округлення ВНИЗ до найближчого цілого числа.
Уоррен Серджент

@WarrenSergent справді: - /
Патрік Онорез

Відповіді:


117

Використовуйте FLOOR :

SELECT FLOOR(your_field) FROM your_table

Дякую. Це дивилося мені в обличчя весь час, коли я читав про круглі ().
d -_- b

Гаразд, я видалив цей коментар, я спробував це, і він повернув 0, коли FLOOR()була різниця між 2 підзапитами (різниця підзапитів становила -70,00) ... коли-небудь бачив це раніше?
Стівен

44

Використовуйте FLOOR () , якщо ви хочете округлити десятковий знак до нижчого цілого числа. Приклади:

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

Використовуйте ROUND () , якщо ви хочете округлити десятковий знак до найближчого цілого числа. Приклади:

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

Використовуйте CEIL () , якщо ви хочете округлити десятковий знак до верхнього цілого числа. Приклади:

CEIL(1.9) => 2
CEIL(1.1) => 2


3

SUBSTRбуде кращим, ніж FLOORу деяких випадках, оскільки FLOOR має "помилку" наступним чином:

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
Я щойно протестував SELECT FLOOR (25 * 9.54 + 0.5) на MySQL 5.6.40, і він повертає 239.
Winter Dragoness

1

Це можна зробити двома способами:

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

Пояснення у другому напрямку: Припустимо, 12345,7344 ціле число. Отже, 12345,7344 - 0,5 = 12345,2344 і результат округлення буде 12345.



0

якщо вам потрібні десяткові знаки, можете використовувати це

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

Вихід: 19.147100 Clear: 985 Add: 00

АБО використовувати це:

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

Вихід: 19.1471 Ясний: 985

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.