是在sqlserver2000中实现。
如16.8363 /1.17,刚好得到14.39或者14.390000000000
500/1.17,得到427.350427350427。可下面的写法,得到的是14.393162393162,而不是14.39。
类型换成numeric,也是一样的错误。declare @results Decimal(18, 12)
declare @a       Decimal(18, 2)
declare @b       Decimal(18, 2)--select  @a=16.8363,@b=1.17
select  @a=500,@b=1.17
select  @results=@a/@b
select  @results

解决方案 »

  1.   

    declare @results Decimal(18, 12)
    declare @a Decimal(18, 2)
    declare @b Decimal(18, 2)--select @a=16.8363,@b=1.17
    select @a=500,@b=1.17
    select @results=CONVERT(DEC(18,2),@a/@b)
    select @results楼主可以查一下精度的问题,是它们一起来确定精度的
      

  2.   

    发生了隐式转换,float的优先级太高了
      

  3.   

    declare @results Decimal(18, 12)
    declare @a Decimal(18, 2)
    declare @b Decimal(18, 2)select @a=16.8363,@b=1.17
    --select @a=500,@b=1.17
    select @results=cast( @a/@b as decimal(18,2))
    select @results
      

  4.   

    这个就是sql是做增值税发票明细录入的。
    如输入含税单价,计算最大位数是12位的不含税单价,
    然后用不含税单价×数量=不含税金额,
    不含税金额 × 0.17=税额。
      

  5.   

    convert(numeric(18,10) ,@a/@b)
      

  6.   


    --发生了隐式转换
    declare @results Decimal(18, 12)
    declare @a Decimal(18, 2)
    declare @b Decimal(18, 2)select @a=16.8363,@b=1.17
    print '@a:' + cast(@a as varchar) + char(10) + '@b:' + cast(@b as varchar)
    select @results=@a/@b
    select @results--增加@a的精度,结果正确
    declare @results Decimal(18, 12)
    declare @a Decimal(18, 4)
    declare @b Decimal(18, 2)select @a=16.8363,@b=1.17
    print '@a:' + cast(@a as varchar) + char(10) + '@b:' + cast(@b as varchar)
    select @results=@a/@b
    select @results
      

  7.   


    --忘了贴结果
    declare @results Decimal(18, 12)
    declare @a Decimal(18, 2)
    declare @b Decimal(18, 2)select @a=16.8363,@b=1.17
    print '@a:' + cast(@a as varchar) + char(10) + '@b:' + cast(@b as varchar)
    select @results=@a/@b
    select @results
    --结果
    /*
    @a:16.84
    @b:1.17---------------------------------------
    14.393162393162(1 行受影响)*/declare @results Decimal(18, 12)
    declare @a Decimal(18, 4)
    declare @b Decimal(18, 2)select @a=16.8363,@b=1.17
    print '@a:' + cast(@a as varchar) + char(10) + '@b:' + cast(@b as varchar)
    select @results=@a/@b
    select @results
    --结果
    /*
    @a:16.8363
    @b:1.17---------------------------------------
    14.390000000000(1 行受影响)*/