Функция SQL Server ROUND()

В этом руководстве вы узнаете, как использовать функцию SQL Server ROUND() для возврата числа, округленного до указанной точности.

Введение в функцию SQL Server ROUND()

В SQL Server функция ROUND() позволяет округлить число до указанной точности.

Вот синтаксис функции ROUND():

ROUND(number, length [, operation])

В этом синтаксисе:

1) число

число — числовое значение или числовое выражение, которое требуется округлить.

2) длина

Длина указывает точность, с которой вы хотите округлить число.

Аргумент length может быть литеральным числом или числовым выражением. Тип length должен быть tinyint, smallint или int.

Длина может быть положительной или отрицательной. Если длина — положительное число, функция округляет число до точности, указанной длиной.

Если длина является отрицательным числом, функция округляет число слева от десятичной точки, как указано в параметре длина.

3) операция

Операция указывает тип операции, которую будет выполнять функция ROUND().

  • Если операция равна 0, функция ОКРУГЛ округлит число.
  • Если операция не равна нулю, функция ROUND() усечет число.

Параметр операции является необязательным и по умолчанию равен 0.

Функция ROUND() возвращает число, тип которого зависит от типа входного числа.

В следующей таблице показаны тип входного числа и соответствующий тип возвращаемого значения функции ROUND():

Тип номера Тип возврата
tinyint, smallint, int инт
bigint bigint
десятичные и числовые категории(p, s) десятичная дробь(п, с)
деньги и мелкие деньгикатегория деньги
категория float и real плавать

Алгоритм округления

Функция ROUND() использует алгоритм округления до ближайшей цифры. Вот шаги, которые выполняет функция ROUND() при округлении числа:

  • Сначала определите желаемое количество десятичных знаков для округления, указанное в аргументе длины.
  • Во-вторых, найдите цифру, стоящую непосредственно справа от нужного десятичного знака.
  • В-третьих, если эта цифра 5 или больше, функция округлит цифру до нужного десятичного знака. Если она меньше 5, функция оставит цифру неизменной.
  • Наконец, измените все цифры справа от нужного десятичного знака на ноль.

Примеры функции SQL Server ROUND()

Давайте рассмотрим несколько примеров использования функции SQL Server ROUND().

1) Пример базовой функции SQL Server ROUND()

В следующем примере функция ROUND() округляет число до единицы с точностью до двух знаков после запятой:

SELECT
  ROUND(10.4567, 2) result;

Выход:

result
-------
10.4600

Результат округления — 10,46000, а не 10,46. Причина в том, что функция ROUND() округляет число, но не меняет его тип.

В этом примере тип входного числа — DEC(6,4). Поэтому результатом будет число того же типа — DEC(6,4).

Если вы хотите получить результат в виде числа с двумя знаками после запятой, вы можете сначала округлить число, а затем привести его к нужному числу. Например:

SELECT
  CAST(ROUND(10.4567, 2) AS DEC(6, 2)) result;

Выход:

result
-------
10.46

2) Использование функции ROUND() с положительными числами

Следующий пример иллюстрирует, как функция ROUND() округляет положительные числа:

SELECT
  ROUND(10.4567, 2) x,
  ROUND(10.4519, 2) y;

Выход:

x       | y
--------+------
10.4600 | 10.4500

3) Использование функции ROUND() с отрицательными числами

Следующий пример демонстрирует, как функция ROUND() работает с отрицательными числами:

SELECT ROUND(-10.4567,2) x,
       ROUND(-10.4519,2) y;

Выход:

x        | y
---------+--------
-10.4600 | -10.4500

4) Использование функции ROUND() для усечения числа

В следующем примере функция ROUND() используется для усечения десятичного числа до числа с точностью до двух знаков после запятой:

SELECT
  ROUND(10.4567, 2, 1) result;

Выход:

result
--------
10.4500

В этом примере третий аргумент функции ROUND() равен 1, поэтому она выполняет усечение вместо округления. Поэтому результат равен 10,4500 вместо 10,4600.

5) Использование функции ROUND() с отрицательной длиной

В следующем примере функция ROUND() используется для округления числа слева от десятичной точки с использованием отрицательной длины:

SELECT
  ROUND(1234.56, -2) result;

Выход:

result
-------
1200.00
(1 row)

6) Использование функции SQL Serer ROUND() с табличными данными

Для демонстрации мы будем использовать таблицу production.products из образца базы данных :

Функция SQL Server ROUND() - пример таблицы

В следующем примере функция AVG() используется для расчета средних цен по прейскуранту всех продуктов в таблице продуктов:

SELECT
  AVG(list_price) avg_list_price
FROM
  production.products;

Выход:

avg_list_price
--------------
1520.591401

Средняя цена по прейскуранту имеет 6 знаков после запятой.

Чтобы сделать его более читабельным, можно использовать функцию ROUND() для округления средней цены по прейскуранту и функцию CAST() для приведения ее к числу с двумя десятичными знаками:

SELECT
  CAST(ROUND(AVG(list_price), 2) AS DEC(10, 2)) avg_list_price
FROM
  production.products;

Выход:

avg_list_price
--------------
1520.59

Краткое содержание

  • Используйте функцию ROUND(), чтобы вернуть число, округленное до указанной точности.
Мирослав С.

Автор статей, ИБ-специалист