不足0.5进到0.5,大于0.5,进到1,如何实现?(23.345-->23.5, 23.558-->24)

不足0.5进到0.5,大于0.5,进到1,如何实现?(23.345-->23.5, 23.558-->24)

比如:
15.75 要修正为 16

15.125 要修正为 15.5

都是向上取整

作者: myjsy   发布时间: 2011-06-10

SQL code
floor()取最小整数 
ceiling()--取最大整数

作者: chuanzhang5687   发布时间: 2011-06-10

select ceiling(15.125) as 向上取整

作者: chuanzhang5687   发布时间: 2011-06-10

SQL code

declare @a nvarchar(50)
declare @b nvarchar(50)
select @a ='15.125'
select @b = substring(@a,1,charindex('.',@a)-1)

if(substring(@a,charindex('.',@a)+1,1)>5)
begin
    print convert(int,@b)+1
end
else
begin
    print @b+'.5'
end


作者: l3143344   发布时间: 2011-06-10

SQL code
DECLARE @var FLOAT
SET @var = 23.558

SELECT
    CASE 
        WHEN @var > CAST(@var AS INT) AND @var < CAST(@var AS INT)+0.5 THEN CAST(@var AS INT)+0.5
        WHEN @var > CAST(@var AS INT)+0.5 AND @var < CAST(@var AS INT)+1 THEN CAST(@var AS INT)+1
        ELSE @var
    END

作者: wwwwgou   发布时间: 2011-06-10

引用 2 楼 chuanzhang5687 的回复:
select ceiling(15.125) as 向上取整

请看我的说明,谢谢
我的要求是 15.5 ,不是 16

作者: myjsy   发布时间: 2011-06-10

SQL code
declare @i decimal(18,1)
set @i=15.65
select case when ceiling(@i+0.5)=ceiling(@i) then ceiling(@i-0.5)+0.5 else ceiling(@i) end 

作者: cd731107   发布时间: 2011-06-10

引用 6 楼 cd731107 的回复:
SQL code
declare @i decimal(18,1)
set @i=15.65
select case when ceiling(@i+0.5)=ceiling(@i) then ceiling(@i-0.5)+0.5 else ceiling(@i) end

+

作者: yubofighting   发布时间: 2011-06-10

都是正数的话,可以这样:
SQL code

declare @v float
set @v = 15.125
select (ceiling(@v)+floor(@v+0.5))/2
/*
----------------------
15.5
*/
set @v = 15.66
select (ceiling(@v)+floor(@v+0.5))/2
/*
----------------------
16
*/

作者: coleling   发布时间: 2011-06-10