ROUND (Transact-SQL)ROUND (Transact-SQL)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data Warehouse

Возвращает числовое значение, округленное до указанной длины или точности.Returns a numeric value, rounded to the specified length or precision.

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

СинтаксисSyntax

ROUND ( numeric_expression , length [ ,function ] )  

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

АргументыArguments

numeric_expressionnumeric_expression
Выражение категории точного числового или приблизительного числового типа данных, за исключением типа данных bit.Is an expression of the exact numeric or approximate numeric data type category, except for the bit data type.

lengthlength
Точность, с которой должно быть округлено значение numeric_expression.Is the precision to which numeric_expression is to be rounded. Аргумент length должен быть выражением типа tinyint, smallint или int. Если аргумент length является положительным числом, значение numeric_expression округляется до числа десятичных разрядов, указанных в аргументе length.length must be an expression of type tinyint, smallint, or int. When length is a positive number, numeric_expression is rounded to the number of decimal positions specified by length. Если аргумент length является отрицательным числом, значение numeric_expression округляется слева от десятичной запятой, как указано в аргументе length.When length is a negative number, numeric_expression is rounded on the left side of the decimal point, as specified by length.

functionfunction
Тип выполняемой операции.Is the type of operation to perform. Аргумент function должен иметь тип tinyint, smallint или int. Если аргумент function не указан или имеет значение 0 (по умолчанию), значение numeric_expression округляется.function must be tinyint, smallint, or int. When function is omitted or has a value of 0 (default), numeric_expression is rounded. Когда указывается значение, не равное 0, значение numeric_expression усекается.When a value other than 0 is specified, numeric_expression is truncated.

Типы возвращаемых данныхReturn Types

Возвращает следующие типы данных.Returns the following data types.

Результат выраженияExpression result Возвращаемый типReturn type
tinyinttinyint intint
smallintsmallint intint
intint intint
bigintbigint bigintbigint
Категория decimal и numeric (p, s)decimal and numeric category (p, s) decimal(p, s)decimal(p, s)
Категории money и smallmoneymoney and smallmoney category moneymoney
Категории float и realfloat and real category floatfloat

RemarksRemarks

Функция ROUND всегда возвращает значение.ROUND always returns a value. Если аргумент length имеет отрицательное значение и больше числа знаков перед десятичной запятой, ROUND возвращает 0.If length is negative and larger than the number of digits before the decimal point, ROUND returns 0.

ПримерExample РезультатResult
ROUND(748,58, -4)ROUND(748.58, -4) 00

Функция ROUND возвращает округленное значение выражения numeric_expression независимо от типа данных, когда length является отрицательным числом.ROUND returns a rounded numeric_expression, regardless of data type, when length is a negative number.

ПримерыExamples РезультатResult
ROUND(748,58, -1)ROUND(748.58, -1) 750,00750.00
ROUND(748,58, -2)ROUND(748.58, -2) 700,00700.00
ROUND(748.58, -3)ROUND(748.58, -3) В результате возникает арифметическое переполнение, так как для значения 748,58 по умолчанию используется тип decimal (5,2), который не позволяет вернуть значение 1000.Results in an arithmetic overflow, because 748.58 defaults to decimal(5,2), which cannot return 1000.00.
Чтобы округлить результат до четырех цифр, измените тип данных на входе.To round up to 4 digits, change the data type of the input. Пример:For example:

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

ПримерыExamples

A.A. Использование функции ROUND и приближенийUsing ROUND and estimates

Следующий пример показывает два выражения, которые демонстрируют, используя ROUND, что последний знак всегда является приближением.The following example shows two expressions that demonstrate by using ROUND the last digit is always an estimate.

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

Результирующий набор:Here is the result set.

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

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

В следующем примере показаны округление и аппроксимация.The following example shows rounding and approximations.

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

Результирующий набор:Here is the result set.

----------  ----------
123.4500    100.00

В.C. Использование функции ROUND для усеченияUsing ROUND to truncate

В следующем примере используются две инструкции SELECT для демонстрации различия между округлением и усечением.The following example uses two SELECT statements to demonstrate the difference between rounding and truncation. Первая инструкция округляет результат.The first statement rounds the result. Вторая инструкция усекает результат.The second statement truncates the result.

SELECT ROUND(150.75, 0);  
GO  
SELECT ROUND(150.75, 0, 1);  
GO  

Результирующий набор:Here is the result set.

--------  
151.00  
  
(1 row(s) affected)  
  
--------  
150.00  
  
(1 row(s) affected)  

См. также:See Also

CEILING (Transact-SQL) CEILING (Transact-SQL)
Типы данных (Transact-SQL) Data Types (Transact-SQL)
Выражения (Transact-SQL) Expressions (Transact-SQL)
FLOOR (Transact-SQL) FLOOR (Transact-SQL)
Математические функции (Transact-SQL)Mathematical Functions (Transact-SQL)