ROUND (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
傳回數值,捨入到指定的長度或有效位數。
語法
ROUND ( numeric_expression , length [ ,function ] )
引數
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 |
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), 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)