2013-06-27 38 views
3

任何人都可以幫助解決以下舍入問題。在此先感謝Sql Server 2008 R2查詢中的舍入問題

我有號:3.1050 要求輸出:3.10 但是當我使用ROUND(3.1050,2)我得到的結果3.11,因此我不能使用ROUND那邊.. 以下是某些情況下,這有助於你解決我的問題

如果值是:3.1030 要求輸出:3.10 如果值是:3.1050 要求輸出:3.10 如果值是:3.1080 要求輸出:3.11

+0

我想你想[「銀行家四捨五入「](http://blogs.msdn.com/b/ericlippert/archive/2003/09/26/bankers-rounding.aspx)/ [」圓到半「](http://en.wikipedia。 org/wiki/Rounding#Round_half_to_even)在T-SQL中。最有效的方法是將.NET'Math.Round'函數用作[CLR函數](http://msdn.microsoft.com/zh-cn/library/ms189876.aspx)。 –

+1

@TimSchmelter *我認爲你想讓麪包師在T-SQL中四捨五入*嗯......麪包師的四捨五入... –

+0

是的,但我必須在SQL Server查詢上不要這樣做.NET – user2493287

回答

7

你需要的是Round Half Towards Zero SQL Server不在內部提供的舍入方法; SQL Server的ROUND()函數總是遵循「捨棄零」,並帶有一個用於截斷而不是四捨五入的附加參數。

因此只寫它使用ROUND()函數圍繞最後一個數字爲5的邊緣情況,然後零用戶功能:

Create Function dbo.RoundToZero(@Val Decimal(32,16), @Digits Int) 
Returns Decimal(32,16) 
AS 
Begin 
    Return Case When Abs(@Val - Round(@Val, @Digits, 1)) * Power(10, @Digits+1) = 5 
       Then Round(@Val, @Digits, 1) 
       Else Round(@Val, @Digits) 
       End 
End 

來源:SQL Server Rounding Methods