如何分别取一个小数的整数部分和小数部分呀,比如12.19,取出来整数为12,小数为19?
========================
19.001,也要取整数19,小数0.001
19.999,也经取出整数为19,小数为0.999
请大家给点思路,谢谢。

解决方案 »

  1.   

    取整数:
    select FLOOR(19.001)  --19取小数
    select 19.001-FLOOR(19.001)  --0.001
      

  2.   

    declare @t numeric(18,2)
    set @t=56.99select @t
    select round(@t,0,1)
    select @t-round(@t,0,1)
      

  3.   

    floor函数对正负数的处理是不一样的。
      

  4.   

    declare @a float
    set @a=-12.05
    select left(@a,charindex('.',@a)-1),
    substring(cast(@a as varchar),charindex('.',@a)+1,8000)
      

  5.   

    declare @a float
    set @a=19.999
    select left(@a,charindex('.',@a)-1) as 整数,
    substring(cast(@a as varchar),charindex('.',@a)+1,8000) 小数
      

  6.   

    declare @a float
    set @a=19.999
    select left(@a,charindex('.',@a)-1) as 整数,
    '0.'+substring(cast(@a as varchar),charindex('.',@a)+1,8000) 小数
      

  7.   

    declare @a float
    set @a=-0.999
    select case when left(@a,charindex('.',@a)-1)='-0' then '0' 
    else left(@a,charindex('.',@a)-1) end as 整数,
    '0.'+substring(cast(@a as varchar),charindex('.',@a)+1,8000) 小数
      

  8.   

    declare @i float
    declare @ii nvarchar(100)
    set @i = -19.999
    set @ii = cast(@i as varchar)
    select cast(left(@ii,charindex('.',@ii) - 1) as int)    -- -19
    if @i > 0
    select '0' + substring(@ii,charindex('.',@ii),4000)
    else
    select '-0' + substring(@ii,charindex('.',@ii),4000)    -- -0.999
      

  9.   

    一中方法用round
    第二中方法用left、substring
      

  10.   


    declare @i numeric(18,2)
    set @i=90.99
    select cast(@i as int)
    select @i-cast(@i as int)--结果
    /*
    ----------- 
    90(所影响的行数为 1 行)                      
    --------------------- 
    .99(所影响的行数为 1 行)
    */