public static void Main()
var withdraw = TaxCalculator.CalculateAmountToWithdraw(a,ss);
Console.WriteLine(withdraw.ToString("C"));
var b = TaxCalculator.CalculateTax(150000, TaxCalculator.federalBrackets, TaxCalculator.federalRates);
public class TaxCalculator
public static double[] federalBrackets = { 23850, 95950, 206700, 394600, 501050, 751600 };
public static double[] federalRates = { 0.10, 0.12, 0.22, 0.24, 0.32, 0.35, 0.37 };
public static double[] stateBrackets = { 20824, 49368, 77918, 108162, 136700, 698274, 837922, 1396542 };
public static double[] stateRates = { 0.01, 0.02, 0.04, 0.06, 0.08, 0.093, 0.103, 0.113, 0.123 };
public static double federalStandardDeduction = 30000;
public static double stateStandardDeduction = 10726;
public static decimal CalculateAmountToWithdraw(double amountNeeded, double socialSecurityIncome)
double amountToWithdraw = amountNeeded;
double previousAmountToWithdraw;
const double tolerance = 5.0;
previousAmountToWithdraw = amountToWithdraw;
double totalIncome = amountToWithdraw + socialSecurityIncome;
double federalTaxableIncome = totalIncome - federalStandardDeduction;
double stateTaxableIncome = totalIncome - stateStandardDeduction - socialSecurityIncome;
double federalTax = CalculateTax(federalTaxableIncome, federalBrackets, federalRates);
double stateTax = CalculateTax(stateTaxableIncome, stateBrackets, stateRates);
double totalTax = federalTax + stateTax;
amountToWithdraw = amountNeeded + totalTax;
} while (Math.Abs(amountToWithdraw - previousAmountToWithdraw) > tolerance);
return (decimal)amountToWithdraw;
public static double CalculateTax(double taxableIncome, double[] brackets, double[] rates)
double previousBracketLimit = 0;
for (int i = 0; i < brackets.Length; i++)
if (taxableIncome > brackets[i])
tax += (brackets[i] - previousBracketLimit) * rates[i];
previousBracketLimit = brackets[i];
tax += (taxableIncome - previousBracketLimit) * rates[i];
if (taxableIncome > brackets[brackets.Length - 1])
tax += (taxableIncome - brackets[brackets.Length - 1]) * rates[rates.Length - 1];