下面的类只有一个方法,它返回某个百分比的除数,所以如果我传递它 5,它将返回 0.05。
public class Adjustment
{
public decimal Amount {get;set;}
public bool IsCompounded {get;set;}
public bool Add{get;set;}
public decimal Calculate(decimal amount)
{
return (amount / 100.0M);
}
}
我的主要方法定义如下:
void Main()
{
Adjustment a1 = new Adjustment {Amount = 10.0M, IsCompounded = false, Add = true};
Adjustment a2 = new Adjustment {Amount = 7.0M, IsCompounded = false, Add = true};
List<Adjustment> adjustments = new List<Adjustment>();
adjustments.Add(a1);
adjustments.Add(a2);
decimal value = 0.0M;
decimal total = 100.0M;
foreach(Adjustment a in adjustments)
{
if(a.IsCompounded)
{
value = (1 + a.Calculate(a.Amount));
if(a.Add)
total *= value;
else
total /= value;
}
else if(!a.IsCompounded)
{
value += a.Calculate(a.Amount);
if(a.Add)
total *= value;
else
total /= value;
}
}
Console.WriteLine(total);
}
在上面的主要方法中,我从 100 开始,如果所有的税都是复合的,它工作正常,我得到 117.7,如果我拿 117.7 并去掉税,我回到 100。对于非复合,我只需要在最后加1,然后除以总数,但我不知道该怎么做。目前,当我循环时,我只是添加除数,例如 0.1 + 0.07 = 0.17。在循环之外,我需要将 1 加到 1.17,然后乘以或除以分别添加或删除税款。然后是复合和非复合调整的问题,这变得更加复杂。在这种情况下,我需要执行以下操作:
例如,假设我有 3 个税,10、7 和 3。10 和 7 是复合的,3 是非复合的,所以公式是:
100 * (1+((1+0.10) * (1+0.07)−1)+((1+0.03)−1)) 简化为 100 * ((1+0.10) * ( (1+0.07)+ 0.03) = 120.70
我不确定如何实现上述内容。