ROUND (Transact-SQL)
Возвращает числовое значение, округленное до указанной длины или точности.
Синтаксис
ROUND ( numeric_expression , length [ ,function ] )
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
numeric_expression
Выражение точной числовой или приблизительной категории типов данных.
length
Точность, с которой должно быть округлено значение numeric_expression. длина должна быть выражением типа tinyint, smallint или int. Если длина является положительным числом, numeric_expression округляется до числа десятичных позиций, указанных по длине. Если аргумент length является отрицательным числом, значение numeric_expression округляется слева от десятичной запятой, как указано в аргументе length.
function
Тип выполняемой операции. функция должна быть крошечной, маленькой или int. Если функция опущена или имеет значение 0 (по умолчанию), numeric_expression округляется. Когда указывается значение, не равное 0, значение numeric_expression усекается.
Типы возвращаемых данных
Возвращает следующие типы данных.
| Результат выражения | Возвращаемый тип |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| Категория decimal и numeric (p, s) | decimal(p, s) |
| Категории money и smallmoney | money |
| Категории float и real | float |
Замечания
Функция ROUND всегда возвращает значение. Если аргумент length имеет отрицательное значение и больше числа знаков перед десятичной запятой, ROUND возвращает 0.
| Пример | Результат |
|---|---|
| ROUND(748,58, -4) | 0 |
Функция ROUND возвращает округленное значение выражения numeric_expression независимо от типа данных, когда length является отрицательным числом.
Примеры
А. Использование функции ROUND и приближений
Следующий пример показывает два выражения, которые демонстрируют, используя ROUND , что последний знак всегда является приближением.
SELECT ROUND(123.9994, 3), ROUND(123.9995, 3); GO
----------- ----------- 123.9990 124.0000
B. Использование функции ROUND и округляющих аппроксимаций
В следующем примере показаны округление и аппроксимация.
SELECT ROUND(123.4545, 2), ROUND(123.45, -2);
---------- ---------- 123.4500 100.00
C. Использование функции ROUND для усечения
В следующем примере используются две инструкции SELECT для демонстрации различия между округлением и усечением. Первая инструкция округляет результат. Вторая инструкция усекает результат.
SELECT ROUND(150.75, 0); GO SELECT ROUND(150.75, 0, 1); GO
-------- 151.00 (1 row(s) affected) -------- 150.00 (1 row(s) affected)
Функция ROUND
Посчитать средний размер жесткого диска ПК. Результат представить с двумя знаками после десятичной точки.

Консоль
Выполнить
мы получим такой результат:
Чтобы выполнить требуемое округление можно воспользоваться функцией ROUND :

Консоль
Выполнить
Второй аргумент этой функции как раз указывает число десятичных знаков результата.
Как видно, результат был округлен по арифметическим правилам. Однако у функции ROUND есть третий необязательный аргумент, который говорит о том, округлять ли результат (значение 0 — принимается по умолчанию) или отбрасывать цифры сверх удерживаемых (ненулевое значение).
Т.е. если мы перепишем наш запрос так:

Консоль
Выполнить
то получим другой результат:
Кстати, округлять можно до любого знака, не только десятичного. Например, чтобы округлять до десятков, сотен и т.д., используются отрицательные значения второго аргумента. Следующий запрос округляет результат до десятков.

Консоль
Выполнить
Следует отметить, что функция ROUND выполняет округление, но не меняет тип результата. Т.е. если аргумент будет иметь тип dec(12,6), то и результат округления будет того же типа, а именно,
В этом легко убедиться, выполнив запрос
Поэтому, если вы хотите избавиться от хвостовых нулей, используйте преобразование к нужному вам типу, например, dec(12,2). Тогда нам и функция ROUND не потребуется. 🙂

Консоль
Выполнить
Функции округления
Возвращает наибольшее круглое число, которое меньше или равно, чем x. Круглым называется число, кратное 1 / 10N или ближайшее к нему число соответствующего типа данных, если 1 / 10N не представимо точно. N — целочисленная константа, не обязательный параметр. По умолчанию — ноль, что означает — округлять до целого числа. N может быть отрицательным.
Примеры: floor(123.45, 1) = 123.4, floor(123.45, -1) = 120.
x — любой числовой тип. Результат — число того же типа. Для целочисленных аргументов имеет смысл округление с отрицательным значением N (для неотрицательных N, функция ничего не делает). В случае переполнения при округлении (например, floor(-128, -1)), возвращается implementation specific результат.
ceil(x [ , N ] )
Возвращает наименьшее круглое число, которое больше или равно, чем x. В остальном, аналогично функции floor, см. выше.
round(x [ , N ] )
Округляет значение до указанного десятичного разряда.
Функция возвращает ближайшее значение указанного порядка. В случае, когда заданное число равноудалено от чисел необходимого порядка, для типов с плавающей точкой (Float32/64) функция возвращает то из них, которое имеет ближайшую чётную цифру (банковское округление), для типов с фиксированной точкой (Decimal) функция использует округление в бо́льшую по модулю сторону (математическое округление).
round(expression [, decimal_places])
Аргументы
- expression — число для округления. Может быть любым выражением, возвращающим числовой тип данных.
- decimal-places — целое значение.
- Если decimal-places > 0 , то функция округляет значение справа от запятой.
- Если decimal-places < 0 то функция округляет значение слева от запятой.
- Если decimal-places = 0 , то функция округляет значение до целого. В этом случае аргумент можно опустить.
Возвращаемое значение:
Округлённое значение того же типа, что и входящее.
Примеры
Пример использования с Float
SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3┌───x─┬─round(divide(number, 2))─┐ │ 0 │ 0 │ │ 0.5 │ 0 │ │ 1 │ 1 │ └─────┴──────────────────────────┘Пример использования с Decimal
SELECT cast(number / 2 AS Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3┌──────x─┬─round(CAST(divide(number, 2), 'Decimal(10, 4)'))─┐ │ 0.0000 │ 0.0000 │ │ 0.5000 │ 1.0000 │ │ 1.0000 │ 1.0000 │ └────────┴──────────────────────────────────────────────────┘Примеры округления
Округление до ближайшего числа.
round(3.2, 0) = 3 round(4.1267, 2) = 4.13 round(22,-1) = 20 round(467,-2) = 500 round(-467,-2) = -500round(3.5) = 4 round(4.5) = 4 round(3.55, 1) = 3.6 round(3.65, 1) = 3.6Смотрите также
roundBankers
Округляет число до указанного десятичного разряда.
-
Если округляемое число равноудалено от соседних чисел, то используется банковское округление.
Банковское округление (англ. banker's rounding) — метод округления дробных чисел. Если округляемое число равноудалено от соседних чисел, то оно округляется до ближайшей чётной цифры заданного десятичного разряда. К примеру, 3,5 округляется до 4, а 2,5 до 2. Этот метод округления, используемый по умолчанию для чисел с плавающей запятой, определён в стандарте [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754#Roundings_to_nearest). Функция [round](#rounding_functions-round) также округляет числа с плавающей запятой по этому методу. Функция `roundBankers` округляет не только числа с плавающей запятой, но и целые числа методом банковского округления, например, `roundBankers(45, -1) = 40`.Банковское округление позволяет уменьшить влияние округления чисел на результат суммирования или вычитания этих чисел.
Пример суммирования чисел 1.5, 2.5, 3.5 и 4.5 с различным округлением:
- Без округления: 1.5 + 2.5 + 3.5 + 4.5 = 12.
- Банковское округление: 2 + 2 + 4 + 4 = 12.
- Округление до ближайшего целого: 2 + 3 + 4 + 5 = 14.
Синтаксис
roundBankers(expression [, decimal_places])Аргументы
- expression — число для округления. Может быть любым выражением, возвращающим числовой тип данных.
- decimal-places — десятичный разряд. Целое число.
- decimal-places > 0 — функция округляет значение выражения до ближайшего чётного числа на соответствующей позиции справа от запятой. Например, roundBankers(3.55, 1) = 3.6 .
- decimal-places < 0 — функция округляет значение выражения до ближайшего чётного числа на соответствующей позиции слева от запятой. Например, roundBankers(24.55, -1) = 20 .
- decimal-places = 0 — функция округляет значение до целого. В этом случае аргумент можно не передавать. Например, roundBankers(2.5) = 2 .
Возвращаемое значение
Округлённое значение по методу банковского округления.
Пример использования
SELECT number / 2 AS x, roundBankers(x, 0) AS b fROM system.numbers limit 10┌───x─┬─b─┐ │ 0 │ 0 │ │ 0.5 │ 0 │ │ 1 │ 1 │ │ 1.5 │ 2 │ │ 2 │ 2 │ │ 2.5 │ 2 │ │ 3 │ 3 │ │ 3.5 │ 4 │ │ 4 │ 4 │ │ 4.5 │ 4 │ └─────┴───┘Примеры банковского округления
roundBankers(0.4) = 0 roundBankers(-3.5) = -4 roundBankers(4.5) = 4 roundBankers(3.55, 1) = 3.6 roundBankers(3.65, 1) = 3.6 roundBankers(10.35, 1) = 10.4 roundBankers(10.755, 2) = 10,76Смотрите также
roundToExp2(num)
Принимает число. Если число меньше единицы — возвращает 0. Иначе округляет число вниз до ближайшей (целой неотрицательной) степени двух.
roundDuration(num)
Принимает число. Если число меньше единицы — возвращает 0. Иначе округляет число вниз до чисел из набора: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. Эта функция специфична для Яндекс.Метрики и предназначена для реализации отчёта по длительности визита.
roundAge(num)
Принимает число. Если число меньше 18 — возвращает 0. Иначе округляет число вниз до чисел из набора: 18, 25, 35, 45, 55. Эта функция специфична для Яндекс.Метрики и предназначена для реализации отчёта по возрасту посетителей.
Артём Санников
Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Главная › Базы данных › MySQL › Математические функции › Округление чисел в SQL, математическая функция ROUND()
Округление чисел в SQL, математическая функция ROUND()
Функция ROUND() в SQL отвечает за округление до ближайшего целого числа.
Синтаксис ROUND()
SELECT ROUND(поле1) FROM имя_таблицы WHERE условие_для_выборки;
Примеры запросов

1. Выполните округление числа 13,7
SELECT ROUND(13.7);
2. Выполните округление заработной платы сотрудника с идентификатором 2, до двух знаков после точки
SELECT ROUND(salary, 2) FROM workers WHERE >3. Округлите заработную плату Василия Петрова до целого числа
SELECT ROUND(salary, 0) FROM workers WHERE first_name = 'Василий' AND last_name = 'Петров';
Записи по теме
- Логарифм в SQL, математическая функция LOG()
- Экспонента в SQL, математическая функция EXP()
- Логарифм по основанию 10, математическая функция LOG10() в SQL
- Возведение числа в степень, математическая функция POWER() в SQL
- Модуль числа в SQL, математическая функция ABS()
- Деление по модулю в SQL, математическая функция MOD()
- Квадратный корень числа в SQL, математическая функция SQRT()