ROUND (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 |
當 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)