2015-04-22 74 views
0

我有一个情况:SQL Server自定义四舍五入

  • 24.9999应为25
  • 24.5000应为25
  • 24.4999应为24
  • 24.1111应为24

我试过Ceiling,但结果将是25,其中Floor将是24。

如何做到这一点?

非常感谢您的时间。

注意:让您知道我希望此功能位于computed column以内可能会有帮助。

+0

你是否在寻找类似的东西 - http://stackoverflow.com/questions/7063962/t-sql-average-rounded-to-the-closest-integer – murtazat

回答

3

用途:

Round(YourNumber, 0) 

中的0表示精度(即小数点后的位数);例如,如果你想将42.51修改为42.5,你可以用0代替0。

确保不要使用float s - 它们有时可能是近似值,这会导致值偶尔舍入不正确。

3

你应该使用round()0[length]参数:

round(field, 0) 

SQLFiddle

+0

非常感谢,但它没有在SQL服务器上工作。即使是圆形函数也有2/3参数 –

+1

应该是Round(YourNumber,0)'来得到你想要的。 – APH

+0

@aphrael OMG ..非常感谢,请回答我的问题,让我可以接受它:) –

1

刚才我在本文接过来一看:

https://social.technet.microsoft.com/Forums/en-us/01ca0dd6-fe5b-4ec9-9949-ce3608fcebf6/sqlround?forum=sqlservermanagementzhcht

遗憾的是它不是” t英语,但它说:

If you need to use round, try not to use float, use decimal or numeric instead 

我试图铸造领域为十进制,和它的作品,这里的小提琴

http://sqlfiddle.com/#!9/3a01fa/4

这里是我的select语句:

select round(cast(smth as decimal)) from tbl 
0

你应该使用圆形(数值_,4 )。长度4表示十进制值的精度的长度。在你的情况下,由于十进制值的长度为4,它将根据4个十进制值进行四舍五入。

1

select round(cast(column as decimal)) from tbl将工作不错 但 select round(column, 0) from tbl不会因为在这种情况下24.5000的工作,很好地将导致24这应该是你的情况25。

0

,您可以继续像这样为你提供的数据

select CAST(CEILING(24.5000)AS INT) 
select CAST(CEILING(24.9999)AS INT) 
select CAST(CEILING(24.1111 -1)AS INT) 
select CAST(CEILING(24.4999 - 1)AS INT) 

或者你有大量的数据,在你具备一定条件的表,那么你可以挑后的十进制值“”点和撰写案例条件accordind到,这不是办法这样做,但达到的效果

declare @t table (ID decimal(18,4)) 
insert into @t(ID)values (24.5000),(24.9999),(24.1111),(24.4999) 
select case when RIGHT(ID, LEN(ID) - CHARINDEX ('.', ID)) - 1 > 4500 
THEN CAST(CEILING(ID)AS INT) 
ELSE CAST(CEILING(ID - 1)AS INT) END from @t