我在程序中“开始时间”与“结束时间”取出两者之前的时间差。
比如开始时间为:14:50 结束时间为16:20 得出的值为1.30
但是保存到数据库时,值为1.00 是不是因为四舍五入的原因。?
请教各位是什么原因

解决方案 »

  1.   

    decimal要定义精度,即decimal(20,2),否则四舍五放成整数
      

  2.   

    时间字段 为什么不用datetime来处理??
      

  3.   

    declare @i datetime,@a datetime,@b datetime,@num int
    set @a='14:50:00'
    set @b='16:20:00'
    set @num=datediff(hh,@a,@b)
    set @i=dateadd(hh,datediff(hh,@a,@b),@a)
    select 
    case when @i>@b
    then 
    ltrim(@num-1)
    +'.'+ltrim(datepart(mi,@a)-datepart(mi,@b))
    when @i<@b then 
    ltrim(@num)
    +'.'+ltrim(datepart(mi,@b)-datepart(mi,@a))
    else ltrim(@num) end
    /*
    -------------------------
    1.30(1 行受影响)
      

  4.   

    程序为datetime类型计算出时间差以后,保存到数据库为decimal,字段默认为2位小数,但是每次不会保存比如“1.25”它只会保存为“1.00”
      

  5.   

    没定义精度吧,DEC(18,2)
      

  6.   

    1.检查表上对应字段的精度是否真的有2位。
    可以用sp_help tb来查询。
    2.检查你程序定义的类型是否为双精度型,检查一下精度长度是否足够。
      

  7.   

    declare @i datetime,@a datetime,@b datetime,@num varchar(10)
    set @a='16:15:00'
    set @b='16:20:00'
    set @num=ltrim(datediff(mi,@a,@b)*1.0/60)
    select @num /*
    -----------------------------------
    0.083333(1 行受影响)我楼上那样算错误,哎
      

  8.   


    Manhour decimal no 13 20    2     yes (n/a) (n/a) NULL字段描述。。