ROUND (Transact-SQL)

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

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Значок ссылки на раздел Cинтаксические обозначения в 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.

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

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)

См. также

Справочник

CEILING (Transact-SQL)

Типы данных (Transact-SQL)

Выражения (Transact-SQL)

FLOOR (Transact-SQL)

Математические функции (Transact-SQL)