一个分段计算的表,如下
T1表
0元-100元    100.01元-500元         500.1元-1000元
   50%           60%                    70%
--------------------------------------------------------
下面有一个数 如 800,那就按如下分解
先从800里拿第一个段的100元出来算-------(0元-100元 这个是100元的间隔)
100*0.5=50
在从800里拿第二个段的400元出来算-------(100.01元-500元  这个是400元的间隔)
400*0.6=240
在把剩下的300元拿出来算
300*0.7=210
最后结果就是
50+240+210=500
得出500,现在我想要一个公式进行反算,就是我现在知道最后的结果值是什么,如500,哪我怎么反算出来800的起始值注意:T1表的值是有多行并可变的,所以需要按读取T1表中的值进行公式反计算
谢谢

解决方案 »

  1.   

    这个得分情况讨论咯,以给出的T1表为例
    T1表
    0元-100元 100.01元-500元 500.1元-1000元假设起始值为X(此类中的800),结果值为R(此类中的500)
    然后得根据R的值范围分3种
     1:  if (R >= 0 && R <= 100*0.5)
             X = R/0.5
     2:  else if(R>50 && R<= (100*0.5+(500-100)*0.6) )
             R = 100*0.5 + (X-100)*0.6  /*自己变形一下吧*/
     3:   else if( R > (100*0.5+(500-100)*0.6))
             R = 100*0.5 + 400*0.6 + (X-100-400)*0.7 /*同上*/然后再根据不同T1表的值,将里面100,500,0.5,0.6 等用变量代替就好
    PS:最基本的思路,没有考虑算法复杂度
      

  2.   


    declare @a money,
    @b money,
    @c money
    set @a=500
    set @b=@a-50
    if @b>=0
    begin
    set @c=50/0.5
    set @a=@b
    set @b=@a-240
    if @b>=0
    begin
    set @c=@c+240/0.6
    set @a=@b
    set @b=@a-350
    if @b>=0
    begin
    set @c=@c+350/0.7
    print @c
    return
    end
    else
    begin
    set @c=@c+@a/0.7
    print @c
    return
    end
    end
    else
    begin
    set @c=@c+@a/0.6
    print @c
    end
    end
    else
    begin
    return
    end以上代码只是实现楼主的要求,没有进行任何优化,提供个思路。最好是做个函数。
      

  3.   


    @a --计算后的结果
    @b --中间量
    @c --反计算后原来的数