ROUND (Transact-SQL)

Возвращает числовое значение, округленное до указанной длины или точности.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

ROUND (numeric_expression , length [ ,function ] )

Аргументы

  • numeric_expression
    Выражение категории типа точных числовых или приблизительных числовых данных, за исключением типа данных bit.

  • length
    Точность, до которой необходимо округлять значение аргумента numeric_expression. Аргумент length должен быть выражением типа tinyint, smallint или int. Когда аргумент length является положительным числом, numeric_expression округляется до числа десятичных разрядов, указанных в аргументе length. Когда length является отрицательным числом, numeric_expression округляется слева от точки, отделяющей десятичную дробь от целого числа, как указано в length.

  • function
    Тип операции, которую необходимо выполнить. Аргумент function должен иметь тип tinyint, smallint или int. Когда аргумент function опускается или имеет значение 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,00.

Чтобы округлить результат до четырех цифр, измените тип данных на входе. Например:

SELECT ROUND(CAST (748.58 AS decimal (6,2)),-3);

1000.00

Примеры

А. Использование функции ROUND и приблизительных значений

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

SELECT ROUND(123.9994, 3), ROUND(123.9995, 3)
GO

Ниже приводится результирующий набор.

----------- -----------
123.9990    124.0000    

Б. Использование функции ROUND и округляющих аппроксимаций

В следующем примере показаны округление и аппроксимация.

SELECT ROUND(123.4545, 2);
GO
SELECT ROUND(123.45, -2);
GO

Ниже приводится результирующий набор.

----------

123.4500

(1 row(s) affected)

--------

100.00

(1 row(s) affected)

В. Использование функции 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)