我讀取T-SQL的所有舍入函數,如Round
,Floor
和Ceil
,但它們都沒有爲我正確舍入十進制數。舍入SQL Server 2008中的十進制數
我有2個問題:
- 如何捨去小數(
3.69
==>3.5
)? - 如何取整數的最後3位數(例如
142600
==>143000
)?
我讀取T-SQL的所有舍入函數,如Round
,Floor
和Ceil
,但它們都沒有爲我正確舍入十進制數。舍入SQL Server 2008中的十進制數
我有2個問題:
3.69
==>3.5
)?142600
==>143000
)?1)select CAST(FLOOR(2 * 3.69)/2 AS decimal(2, 1))
處理第一種情況下 - 的answer to a similar question on SQL Server Forums,我適於並迅速檢查的禮貌。
請注意,如果你是四捨五入到最接近0.5
的數字可能會更大(如333.69
=>333.5
),可以肯定,當你施放指定更多decimal
精度(例如select CAST(FLOOR(2 * 3.69)/2 AS decimal(10, 1))
),或者你可以得到一個溢出錯誤:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
額外的精度不會影響底線結果(即select CAST(FLOOR(2 * 3.69)/2 AS decimal(10, 1))
和select CAST(FLOOR(2 * 3.69)/2 AS decimal(2, 1))
都得到3.5
);但是如果您舍入的數字總是較小,那就很浪費。
有關示例的在線參考可用於T-SQL FLOOR
,CAST
和decimal
以提供幫助。
2)select ROUND(142600, -3)
處理第二種情況。
一個類似的在線參考可用於T-SQL ROUND
。
謝謝J0e3gan.It正常工作! –
作爲每@ J0e3gan的anwser,Sql Server's Round使用length
參數,其中長度是10^(-length)
允許四捨五入至10最近的權力,例如
length = 0 : 10^0 = nearest 1
length = 3 : 10^-3 = nearest .001
length = -3 : 10^3 = nearest 1000
等
然而,在一般情況下,用一個簡單的基於1的舍入函數 - 例如(長度= 0的圓形)以四捨五入爲「最接近的N」的任意值 - 具有以下公式:
round(X/N) * N
例如,最近的100
select round(12345/100.0, 0) * 100.0 -- 12300
select round(-9876/100.0, 0) * 100.0 -- -9900
select round(-9849/100.0, 0) * 100.0 -- -9800
...最近的0.5
select round(5.123/0.5, 0) * 0.5 -- 5.000
select round(6.499/0.5, 0) * 0.5 -- 6.500
select round(-4.499/0.5, 0) * 0.5 -- -4.50
...最近的0.02
select round(5.123/.02, 0) * .02 -- 5.12
select round(-9.871/.02, 0) * .02 -- -9.88
等
記住的是,用於約數的類型必須是數字/十進制或浮點數。
謝謝你的回覆。所有的代碼都是真實的 –
Oracle/PLSQL FLOOR
函數返回等於或小於數字的最大整數值。 例如:
FLOOR(7.9)
Result: 7
FLOOR(30.29)
Result: 30
FLOOR(-7.9)
Result: -8
你應該寫udf。 –