ROUND (Transact-SQL)

適用于: Microsoft Fabric 中 Microsoft Fabric 倉儲中的 SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) SQL 分析端點

傳回數值,捨入到指定的長度或有效位數。

Transact-SQL 語法慣例

Syntax

ROUND ( numeric_expression , length [ ,function ] )  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

numeric_expression
這是精確數值或近似數值資料類型類別目錄的運算式

length
這是 numeric_expression 捨入到的有效位數。 length 必須是 tinyintsmallintint 類型的運算式。當 length 是正數時,numeric_expression 會捨入到 length 所指定的十進位數。 當 length 是負數時,numeric_expression 會依照 length 所指定的方式,在小數點左側捨入。

函數
這是要執行的作業類型。 function 必須是 tinyintsmallintint。當 function 遭到省略或者值為 0 (預設值) 時,會捨入 numeric_expression。 當指定 0 以外的值時,會截斷 numeric_expression

傳回型別

傳回下列資料類型。

運算式結果 傳回類型
tinyint int
smallint int
int int
bigint bigint
decimalnumeric 類別 (p, s) decimal(p, s)
moneysmallmoney 類別 money
floatreal 類別 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)