private Dollars Charge(int usage) { Dollars result; if (usage == 0) return new Dollars(0); double t1 = START_RATE - ((END_RATE*END_AMOUNT) - START_RATE)/(END_AMOUNT - 1); double t2 = ((END_RATE*END_AMOUNT) - START_RATE)*Math.Min(END_AMOUNT, usage)/ (END_AMOUNT - 1); double t3 = Math.Max(usage - END_AMOUNT, 0)*END_RATE; result = new Dollars(t1 + t2 + t3); result = result.Plus(new Dollars(usage*0.0175)); Dollars base1 = new Dollars(result.Min(new Dollars(50)).Times(0.07)); if (result.IsGreaterThan(new Dollars(50))) { base1 = new Dollars(base1.Plus(result.Min(new Dollars(75)).Minus( new Dollars(50)).Times(0.06) )); } if (result.IsGreaterThan(new Dollars(75))) { base1 = new Dollars(base1.Plus(result.Minus(new Dollars(75)).Times(0.05))); } result = result.Plus(base1); return result; }
private Dollars Charge(int usage) { double base1 = Math.Min(usage, 100)*0.03; if (usage > 100) { base1 += (Math.Min(usage, 200) - 100)*0.05; } if (usage > 200) { base1 += (usage - 200)*0.07; } Dollars result = new Dollars(base1); Dollars tax = new Dollars(result.Minus(new Dollars(8)).Max(new Dollars(0)).Times(TAX_RATE)); result = result.Plus(tax); Dollars fuelCharge = new Dollars(usage*0.0175); result = result.Plus(fuelCharge); return result.Plus(new Dollars(fuelCharge.Times(TAX_RATE))); }