今天心血来潮,编写了一个个人所得税计算器,呵呵,虽然功能不是很强,而且也是重复造轮子(网上也有许多的个人所得税计算器),不过“纸上得来总觉浅,绝知此事要躬行”,自己动动手绝对有好处的。
下面是个人所得税计算的类:
下面是个人所得税计算的类:
1namespace SalaryComputer
2{
public class PersonalIncomeTax
{
字段/属性#region 字段/属性
/** <summary>
/// 税率
/// </summary>
private double[] taxRate = { 0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45 };
11 /** <summary>
/// 税率(税率最好保存在数据库表里或xml文件,当国家出台新的个人所得税政策法规时,不需要修改代码部分)
/// </summary>
public double[] TaxRate
{
get { return taxRate; }
set { taxRate = value; }
}
20 /** <summary>
/// 速算扣除数
/// </summary>
private double[] subtractNumber = { 0, 0, 25, 125, 375, 1375, 3375, 6375, 10375, 15375 };
25 /** <summary>
/// 速算扣除数
/// </summary>
public double[] SubtractNumber
{
get { return subtractNumber; }
set { subtractNumber = value; }
}
34 /** <summary>
/// 超过起征税的数额
/// </summary>
private double[] surpassAmount = { 0, 500, 2000, 5000, 20000, 40000, 60000, 80000, 100000 };
39 /** <summary>
/// 超过起征税的数额
/// </summary>
public double[] SurpassAmount
{
get { return surpassAmount; }
set { surpassAmount = value; }
}
48 /** <summary>
/// 征税起点工资
/// </summary>
private double startTaxSalary;
53 /** <summary>
/// 征税起点工资
/// </summary>
public double StartTaxSalary
{
get { return startTaxSalary; }
set { startTaxSalary = value; }
}
#endregion
63 构造函数#region 构造函数
/** <summary>
/// 无参构造函数
/// </summary>
public PersonalIncomeTax()
{
StartTaxSalary = 2000;
}
72 /** <summary>
/// 征税基本工资有时会随国家政策,法律变更
/// </summary>
/// <param name="baseSalary">征税基本工资</param>
public PersonalIncomeTax(double taxSalary)
{
StartTaxSalary = taxSalary;
}
#endregion
82 自定义方法#region 自定义方法
/** <summary>
/// 计算个人所得税,返回应缴税收,征税后所得薪水
/// </summary>
/// <param name="Salary">薪水</param>
/// <param name="Welfare">五险一金数额</param>
/// <param name="IsChinaNationality">是否是中国国籍</param>
/// <param name="taxedSalary">税后所得实际工作</param>
/// <returns>返回个人所得税</returns>
public double CalculatePersonTax(double Salary, double Welfare, bool IsChinaNationality, out double taxedSalary)
{
double RateSalary = 0;
95 RateSalary = Salary - StartTaxSalary - Welfare;
97 if (!IsChinaNationality)
{
RateSalary = RateSalary - 3000;
}
102 int rateIndex = 0;
104 if (RateSalary >= 0)
{
for (int index = 0; index < SurpassAmount.Length; index++)
{
if (RateSalary >= SurpassAmount[index] && RateSalary <= SurpassAmount[index + 1])
{
rateIndex = index + 1;
break;
}
}
}
116 double rate = RateSalary * TaxRate[rateIndex] - SubtractNumber[rateIndex];
taxedSalary = Salary - Welfare - rate;
119 return rate;
}
122 #endregion
}
124}
125