Как округлить до ближайшего целого числа в MySQL?


84

Как мне округлить до ближайшего целого числа в MySQL?

Пример: 12345.7344 rounds to 12345

round()Функция mysql округляется вверх.

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


Ваш пример НЕ округляется до ближайшего целого числа!
Патрик Онорез 02

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

@WarrenSergent действительно: - /
Патрик Онорез

Ответы:


119

Используйте ЭТАЖ :

SELECT FLOOR(your_field) FROM your_table

Спасибо. Он смотрел мне в лицо все время, пока я читал о round ().
d -_- b

Хорошо, я удалил этот комментарий, я попробовал это, и он вернул 0, когда FLOOR()была разница между двумя подзапросами (разница в подзапросах была -70,00) ... когда-либо видел это раньше?
Стивен

46

Используйте 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 Очистить: 985 Добавить: 00

ИЛИ используйте это:

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

Продукт: 19,1471 Очистить: 985

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.