一个分段计算的表,如下
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表中的值进行公式反计算
谢谢
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表中的值进行公式反计算
谢谢
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:最基本的思路,没有考虑算法复杂度
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以上代码只是实现楼主的要求,没有进行任何优化,提供个思路。最好是做个函数。
@a --计算后的结果
@b --中间量
@c --反计算后原来的数