ROUND (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

返回一个数值,舍入到指定的长度或精度。

Transact-SQL 语法约定

语法

ROUND ( numeric_expression , length [ ,function ] )  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

numeric_expression
是精确数值或近似数值数据类型类别的表达式

length
它是 numeric_expression 的舍入精度。 length 必须是 tinyint、smallint 或 int 类型的表达式 。如果 length 为正数,则将 numeric_expression 舍入到 length 指定的小数位数 。 如果 length 为负数,则将 numeric_expression 小数点左边部分舍入到 length 指定的长度

函数
要执行的操作的类型。 function 的数据类型必须是 tinyint、smallint 或 int 。如果 function 省略或其值为 0(默认值),则对 numeric_expression 进行舍入。 如果指定了 0 以外的值,则将截断 numeric_expression

返回类型

返回以下数据类型。

表达式结果 返回类型
tinyint int
smallint int
int int
bigint bigint
decimalnumeric 类别 (p, s) decimal(p, s)
money 和 smallmoney 类别 money
float 和 real 类别 float

注解

ROUND 始终返回一个值。 如果 length 为负数,并且大于小数点前的数字个数,则 ROUND 将返回 0

示例 结果
ROUND(748.58, -4) 0

如果 length 为负数,则无论什么数据类型,ROUND 都将返回一个舍入的 numeric_expression

示例 结果
ROUND(748.58, -1) 750.00
ROUND(748.58, -2) 700.00
ROUND(748.58, -3) 导致算术溢出,因为 748.58 默认为 decimal(5,2),它无法返回 1000.00。
若要向上舍入到 4 位,请更改输入的数据类型。 例如:

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

示例

A. 使用 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)  

另请参阅

CEILING (Transact-SQL)
数据类型 (Transact-SQL)
表达式(Transact-SQL)
FLOOR (Transact-SQL)
数学函数 (Transact-SQL)