不足0.5算0.5数据源
select * from (
select 1.00 as b union all
select 2.00 as b union all
select 1.01 as b union all
select 0.01 as b union all
select 0.49 as b union all
select 2.51 as b union all
select 2.99 as b union all
) as tb
得到以下结果1.00=1.00
2.00=2.001.01=1.5
1.49=1.50.01=0.5
0.49=0.52.51=3
2.99=3

解决方案 »

  1.   

    select b, (ceiling(b) + round(b,0)) / 2 from
    (
    select 1.00 as b union all
    select 2.00 as b union all
    select 1.01 as b union all
    select 0.01 as b union all
    select 0.49 as b union all
    select 2.51 as b union all
    select 2.99 as b
    ) tb
      

  2.   

    select left(b,1)+case 
    when right(b,2) between 1 and 49 then .5
    when right(b,2) between 50 and 100
    then 1 else 0 end
     from (
    select 1.00 as b union all
    select 2.00 as b union all
    select 1.01 as b union all
    select 0.01 as b union all
    select 0.49 as b union all
    select 2.51 as b union all
    select 2.99 as b 
    ) as tb 
    ---------------------------------------
    1.0
    2.0
    1.5
    0.5
    0.5
    3.0
    3.0(7 行受影响)
      

  3.   

    select b,floor(b)+(case when  b%1>0 and b%1<0.5 then 0.5 
                  when b%1>0.5 then 1 else 0 end) from (
    select 1.00 as b union all
    select 2.00 as b union all
    select 1.01 as b union all
    select 0.01 as b union all
    select 0.49 as b union all
    select 2.51 as b union all
    select 2.99 as b  
    ) dd/*
    ----    ----
    1.00 1.0
    2.00 2.0
    1.01 1.5
    0.01 0.5
    0.49 0.5
    2.51 3.0
    2.99 3.0
    */
      

  4.   

    declare @i decimal(18,2)
    set @i=2.99
    select cast(@i+0.5 as int)+ case when cast(@i+0.5 as int)>=@i then 0 else 0.5 end
      

  5.   

    select b, (ceiling(b) + round(b - 0.01,0)) / 2 from
    (
    select 1.00 as b union all
    select 2.00 as b union all
    select 1.01 as b union all
    select 0.01 as b union all
    select 0.49 as b union all
    select 2.51 as b union all
    select 2.50 as b union all
    select 2.99 as b
    ) tb
      

  6.   

    select b, '=', (ceiling(b) + round(b - 0.01,0)) / 2  as c from
    (
    select 1.00 as b union all
    select 2.00 as b union all
    select 1.01 as b union all
    select 0.01 as b union all
    select 0.49 as b union all
    select 2.51 as b union all
    select 2.50 as b union all
    select 2.99 as b
    ) tb
    /*
    b          c            
    ----- ---- ------------ 
    1.00  =    1.000000
    2.00  =    2.000000
    1.01  =    1.500000
    .01   =    .500000
    .49   =    .500000
    2.51  =    3.000000
    2.50  =    2.500000
    2.99  =    3.000000(所影响的行数为 8 行)
    */
      

  7.   


    select left(b,1)+case 
    when right(b,2) between 1 and 49 then 0.5
    when right(b,2) between 50 and 50 then 0.5
    when right(b,2) between 51 and 100
    then 1 else 0 end
     from (
    select 1.00 as b union all
    select 2.00 as b union all
    select 1.01 as b union all
    select 0.01 as b union all
    select 0.50 as b union all
    select 0.5 as b union all
    select 2.50 as b union all
    select 2.99 as b 
    ) as tb---------------------------------------
    1.0
    2.0
    1.5
    0.5
    0.5
    0.5
    2.5
    3.0(8 行受影响)
      

  8.   

    select b, case when b%1.0>0 and b%1.0<0.5 then cast(b as int) +0.5 
                   when b%1.0 >0.5 then cast (b as int)+1
                   when b%1.0 = 0 then b
                   else  cast (b as int)+0.5 end
     from #t1
      

  9.   

    我表示我就想到了写函数~我脑子是不是比较笨撒。!!~
    alter function dbo.f_setvalue(@value decimal(18,2)) returns decimal(18,2)
    as
    begin
    declare @result decimal(18,2)
    declare @strvalue varchar(20)
    declare @subvalue decimal(18,2)
    set @strvalue=cast(@value as varchar(20))
    set @subvalue=cast(substring(@strvalue,charindex('.',@strvalue),len(@strvalue)-charindex('.',@strvalue)) as decimal(18,2))
    if (@subvalue<=0.5)
    begin
    set @subvalue=0.5
    set @result=cast(substring(@strvalue,1,charindex('.',@strvalue)-1)+'.5' as decimal(18,2))
    end
    else
    set @result=cast(@value as int)+1
    return @result
    end