---SQL四舍五入問題1:
SELECT CAST('123.456' as decimal) ---123 將會得到 123(小數點后面的將會被省略掉)。
---如果希望得到小數點后面的兩位。則需要把上面的改為
SELECT CAST('123.456' as decimal(38, 2)) ----123.46---自動四舍五入了!
---SQL四舍五入問題2:
SELECT ROUND(123.75633, 2, 1) ---123.75000
SELECT ROUND(123.75633, 2) ---123.76000
--因為前者在進行四舍五入之前,小數點后已經被截取,保留了2位。
--而后者則沒有被截取,四舍五入時自然就會得到123.76000
ROUND --返回數字表達式並四舍五入為指定的長度或精度。
ROUND ( numeric_e-xpression , length [ , function ] )
--參數numeric_e-xpression
--精確數字或近似數字數據類型類別的表達式(bit 數據類型除外)。
--length是 numeric_e-xpression 將要四舍五入的精度。length 必須是 tinyint、smallint 或int。
--當 length 為正數時,numeric_e-xpression 四舍五入為 length 所指定的小數位數。
--當 length 為負數時,numeric_e-xpression 則按 length 所指定的在小數點的左邊四舍五入。
--function是要執行的操作類型。function 必須是 tinyint、smallint 或 int。如果省略 function 或 function 的值為 0(默認),numeric_e-xpression 將四舍五入。當指定 0 以外的值時,將截斷 numeric_e-xpression。
--返回類型返回與 numeric_e-xpression 相同的類型。
--注釋ROUND 始終返回一個值。如果 length 是負數且大於小數點前的數字個數,ROUND 將返回 0。
--示例 結果
SELECT ROUND(748.58, -4) --0
當 length 是負數時,無論什么數據類型,ROUND 都將返回一個四舍五入的 numeric_e-xpression。
示例 結果
ROUND(748.58, -1) 750.00
ROUND(748.58, -2) 700.00
ROUND(748.58, -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)
123.4500
Select ROUND(123.45, -2)
100.00
C. 使用 ROUND 截斷
下例使用兩個 Select 語句說明四舍五入和截斷之間的區別。第一個語句四舍五入結果。第二個語句截斷結果。
語句 結果
Select ROUND(150.75, 0)
151.00
Select ROUND(150.75, 0, 1)
150.00
---SQL四舍五入問題1:
SELECT CAST('123.456' as decimal) ---123 將會得到 123(小數點后面的將會被省略掉)。
---如果希望得到小數點后面的兩位。則需要把上面的改為
SELECT CAST('123.456' as decimal(38, 2)) ----123.46---自動四舍五入了!
---SQL四舍五入問題2:
SELECT ROUND(123.75633, 2, 1) ---123.75000
SELECT ROUND(123.75633, 2) ---123.76000
--因為前者在進行四舍五入之前,小數點后已經被截取,保留了2位。
--而后者則沒有被截取,四舍五入時自然就會得到123.76000
ROUND --返回數字表達式並四舍五入為指定的長度或精度。
ROUND ( numeric_e-xpression , length [ , function ] )
--參數numeric_e-xpression
--精確數字或近似數字數據類型類別的表達式(bit 數據類型除外)。
--length是 numeric_e-xpression 將要四舍五入的精度。length 必須是 tinyint、smallint 或int。
--當 length 為正數時,numeric_e-xpression 四舍五入為 length 所指定的小數位數。
--當 length 為負數時,numeric_e-xpression 則按 length 所指定的在小數點的左邊四舍五入。
--function是要執行的操作類型。function 必須是 tinyint、smallint 或 int。如果省略 function 或 function 的值為 0(默認),numeric_e-xpression 將四舍五入。當指定 0 以外的值時,將截斷 numeric_e-xpression。
--返回類型返回與 numeric_e-xpression 相同的類型。
--注釋ROUND 始終返回一個值。如果 length 是負數且大於小數點前的數字個數,ROUND 將返回 0。
--示例 結果
SELECT ROUND(748.58, -4) --0
當 length 是負數時,無論什么數據類型,ROUND 都將返回一個四舍五入的 numeric_e-xpression。
示例 結果
ROUND(748.58, -1) 750.00
ROUND(748.58, -2) 700.00
ROUND(748.58, -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)
123.4500
Select ROUND(123.45, -2)
100.00
C. 使用 ROUND 截斷
下例使用兩個 Select 語句說明四舍五入和截斷之間的區別。第一個語句四舍五入結果。第二個語句截斷結果。
語句 結果
Select ROUND(150.75, 0)
151.00
Select ROUND(150.75, 0, 1)
150.00