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(748,58, -1) | 750,00 |
ROUND(748,58, -2) | 700.00 |
ROUND(748.58, -3) | В результате возникает арифметическое переполнение, так как для значения 748,58 по умолчанию используется тип decimal (5,2), который не позволяет вернуть значение 1000. |
Чтобы округлить результат до четырех цифр, измените тип данных на входе. Например: |
Примеры
А. Использование функции 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)
См. также
Обратная связь
Были ли сведения на этой странице полезными?
Обратная связь
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.
Отправить и просмотреть отзыв по
Функция SQL ROUND()
Оператор SQL ROUND() — функция для округления десятичных чисел. Работает только с числовыми столбцами или произвольными вещественными числами.
Функция SQL ROUND() имеет следующий синтаксис:
ROUND(expression, length)
expression — название столбца или столбцов, а так же вещественное число.
length — указывает точность округления для числа.
Примеры оператора SQL ROUND. Имеется следующая таблица Planets :
ID | PlanetName | Radius | SunSeason | OpeningYear | HavingRings | Opener |
1 | Mars | 3396 | 687.58 | 1659 | No | Christiaan Huygens |
2 | Saturn | 60268 | 10759.22 | — | Yes | — |
3 | Neptune | 24764 | 60190.91 | 1846 | Yes | John Couch Adams |
4 | Mercury | 2439 | 115.88 | 1631 | No | Nicolaus Copernicus |
5 | Venus | 6051 | 243.56 | 1610 | No | Galileo Galilei |
Пример 1. Используя оператор SQL ROUND округлить столбец SunSeason с точностью до одного знака после запятой:
SELECT ROUND(SunSeason, 1) FROM Planets
SunSeason |
687.5 |
10759.2 |
60190.9 |
115.8 |
243.5 |
Пример 2. Округлить значение числа с использованием оператора SQL ROUND.
Функция SQL ROUND() может принимать в качестве первого аргумента любое вещественное число:
SELECT ROUND(43532.8123, 3)
Как округлить число в sql
Для округления используется функция ROUND() . Вызванная с одним аргументом она округляет число до ближайшего целого, например:
SELECT ROUND( 10.4 );
Значение 10.4 будет округлено до 10.
Второй аргумент показывает до скольки знаков после запятой нужно округлять:
SELECT ROUND( 10.812, 2 );
В результате мы получим 10.81.
Функции округления
Возвращает наибольшее круглое число, которое меньше или равно, чем 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) = -500
round(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. Эта функция специфична для Яндекс.Метрики и предназначена для реализации отчёта по возрасту посетителей.