ROUND (Transact-SQL)
返回一个数值,舍入到指定的长度或精度。
适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。 |
语法
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 |
如果 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);
GO
SELECT ROUND(123.45, -2);
GO
下面是结果集:
----------
123.4500
(1 row(s) affected)
--------
100.00
(1 row(s) affected)
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)