共用方式為


ROUND (Transact-SQL)

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

適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。

主題連結圖示 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)

請參閱

參考

CEILING (Transact-SQL)

資料類型 (Transact-SQL)

運算式 (Transact-SQL)

FLOOR (Transact-SQL)

數學函數 (Transact-SQL)