工作兩個周的一點總結


元旦放假三天,終於有時間可以歇一歇了。到現在已經工作兩個周了,這期間如果用一個字形容是:忙,用另外一個字形容就是:累。

入職第一天,項目經理給我簡單的介紹了一下公司使用的框架,然后給我分配了一個任務練練手,完成目前正在做的項目的基礎數據部分最簡單的增刪查改,還好,照着現有的例子很快就完成了。就這樣,從第一天開始就參與到項目中來,每天都有任務。工作之前,我還有一個項目沒有完成,只能在晚上8點到11點抽出僅有的3個小時來完成。以前在學校的時候,中午還可以看個電影,現在我已經兩周沒看電影了,明天回學校,看看我們網絡中心的孩子們,有些想他們了。

我們目前做的是某集團的薪酬考評系統,前幾天涉及到計算個人所得稅的問題,也沒有什么好的計算方法,下面給出我的方法,如果大家有什么好的方法,懇請指教。

問題描述:有兩個表,一個父表,一個子表,用來存儲個稅稅率設置。在父表中可以存儲多個個稅稅率設置,有一個“起征額”字段,子表存儲每個個稅稅率設置的詳細信息,如下面兩個表所示:

現行個稅9級超額累進稅率

全月應納稅所得額 稅率% 速算扣除數(元)
全月應納稅額不超過500元 5% 0
全月應納稅額超過500元至2000元 10% 25
全月應納稅額超過2000元至5000元 15% 125
全月應納稅額超過5000元至20000元 20% 375
全月應納稅額超過20000元至40000元 25% 1375
全月應納稅額超過40000元至60000元 30% 3375
全月應納稅額超過60000元至80000元 35% 6375
全月應納稅額超過80000元至100000元 40% 10375
全月應納稅額超過100000元 45% 15375

2011年9月1日起調整后的7級超額累進稅率:

全月應納稅所得額 稅率% 速算扣除數(元)
全月應納稅額不超過1500元 3% 0
全月應納稅額超過1500元至4500元 10% 105
全月應納稅額超過4500元至9000元 20% 555
全月應納稅額超過9000元至35000元 25% 1005
全月應納稅額超過35000元至55000元 30% 2755
全月應納稅額超過55000元至80000元 35% 5505
全月應納稅額超過80000元 45% 13505

具體可以參考百度百科:個人所得稅

我的計算方法:為了方便起見,我用控制台寫了一個例子。

首先定義兩個類:

public class IncomeTax
{
    public string Id { get; set; }
    /// <summary>
    /// 起征額
    /// </summary>
    public decimal StartMoney { get; set; }

    public List<IncomeTaxDetail> IncomeTaxDetailList { get; set; }
}

public class IncomeTaxDetail
{
    public string Id { get; set; }
    /// <summary>
    /// 最低
    /// </summary>
    public decimal MinMoney { get; set; }
    /// <summary>
    /// 最高
    /// </summary>
    public decimal MaxMoney { get; set; }
    /// <summary>
    /// 稅率
    /// </summary>
    public decimal TaxRate { get; set; }
    /// <summary>
    /// 速扣數
    /// </summary>
    public decimal KouMoney { get; set; }

    public IncomeTax IncomeTax { get; set; }
}

在Mian方法中初始化:

IncomeTax it_7 = new IncomeTax()
{
    Id = "1",
    StartMoney = 3500,
    IncomeTaxDetailList = new List<IncomeTaxDetail>()
    {
       new IncomeTaxDetail(){ Id="7_1",MinMoney=0,MaxMoney=1500,TaxRate=0.03m,KouMoney=0},
       new IncomeTaxDetail(){Id="7_2",MinMoney=1500,MaxMoney=4500,TaxRate=0.1m,KouMoney=105},
       new IncomeTaxDetail(){Id="7_3",MinMoney=4500,MaxMoney=9000,TaxRate=0.2m,KouMoney=555},
       new IncomeTaxDetail(){Id="7_4",MinMoney=9000, MaxMoney=35000,TaxRate=0.25m,KouMoney=1005},
       new IncomeTaxDetail(){Id="7_5",MinMoney=35000,MaxMoney=55000,TaxRate=0.3m,KouMoney=2755},
       new IncomeTaxDetail(){Id="7_6",MinMoney=55000, MaxMoney=80000,TaxRate=0.35m,KouMoney=5505},
       new IncomeTaxDetail(){Id="7_7",MinMoney=80000,TaxRate=0.45m,KouMoney=13505}
    }
};

IncomeTax it_9 = new IncomeTax()
{
    Id = "2",
    StartMoney = 2000,
    IncomeTaxDetailList = new List<IncomeTaxDetail>()
    {
       new IncomeTaxDetail(){ Id="9_1",MinMoney=0,MaxMoney=500,TaxRate=0.05m,KouMoney=0},
       new IncomeTaxDetail(){Id="9_2",MinMoney=500,MaxMoney=2000,TaxRate=0.1m,KouMoney=25},
       new IncomeTaxDetail(){Id="9_3",MinMoney=2000,MaxMoney=5000,TaxRate=0.15m,KouMoney=125},
       new IncomeTaxDetail(){Id="9_4",MinMoney=5000,MaxMoney=20000,TaxRate=0.2m,KouMoney=375},
       new IncomeTaxDetail(){Id="9_4",MinMoney=20000,MaxMoney=40000,TaxRate=0.25m,KouMoney=1375},
       new IncomeTaxDetail(){Id="9_5",MinMoney=40000,MaxMoney=60000,TaxRate=0.3m,KouMoney=3375},
       new IncomeTaxDetail(){Id="9_6",MinMoney=60000,MaxMoney=80000,TaxRate=0.35m,KouMoney=6375},
       new IncomeTaxDetail(){Id="9_7",MinMoney=80000,MaxMoney=100000,TaxRate=0.4m,KouMoney=10375},
       new IncomeTaxDetail(){Id="9_7",MinMoney=100000,TaxRate=0.45m,KouMoney=15375}
    }
};

計算個人所得稅方法:

{(總工資)-(三險一金)-(免征額)}*稅率-速扣數=個人所得稅。

/// <summary>
/// 計算個人所得稅
/// </summary>
/// <param name="taxSalary">計稅工資</param>
/// <param name="startMoney">起征額</param>
/// <param name="list">個稅稅率列表</param>
/// <param name="taxMoney">輸出個人所得稅</param>
public static void CalculateIncomeTax(decimal taxSalary, decimal startMoney, List<IncomeTaxDetail> list, out decimal taxMoney)
{
    decimal exceedSalary = taxSalary - startMoney;
    var detailList = list.OrderBy(itd => itd.TaxRate).ToList();

    taxMoney = 0;

    if (exceedSalary <= detailList[0].MaxMoney)
    {
        taxMoney = exceedSalary * detailList[0].TaxRate - detailList[0].KouMoney;
        return;
    }
    if (exceedSalary > detailList[detailList.Count - 1].MinMoney)
    {
        taxMoney = exceedSalary * detailList[detailList.Count - 1].TaxRate - detailList[detailList.Count - 1].KouMoney;
        return;
    }
    for (int i = 0; i < detailList.Count - 2; i++)
    {
        if (detailList[i].MaxMoney < exceedSalary && exceedSalary <= detailList[i + 1].MaxMoney)
        {
            taxMoney = exceedSalary * detailList[i + 1].TaxRate - detailList[i + 1].KouMoney;
            return;
        }
    }
}

下面在Main方法中,測試一下兩種稅率情況下的個人所得稅吧,假設計稅工資為6000

//計稅工資=總工資-三險一金
decimal taxSalary = 6000;
//起征額
decimal startMoney_7 = it_7.StartMoney;
decimal startMoney_9 = it_9.StartMoney;

decimal taxMoney;
CalculateIncomeTax(taxSalary, startMoney_7, it_7.IncomeTaxDetailList, out taxMoney);
Console.WriteLine("7級超額累進稅率時的個人所得稅是:" + taxMoney);
CalculateIncomeTax(taxSalary, startMoney_9, it_9.IncomeTaxDetailList, out taxMoney);
Console.WriteLine("9級超額累進稅率時的個人所得稅是:" + taxMoney);

運行結果如下圖所示:

QQ截圖20111231230930

另外計算個人所得稅的方法還有另外一種方法:

/// <summary>
/// 計算個人所得稅
/// </summary>
/// <param name="taxSalary">計稅工資</param>
/// <param name="startMoney">起征額</param>
/// <param name="list">個稅稅率列表</param>
/// <param name="taxMoney">輸出個人所得稅</param>
public static void CalculateIncomeTax(decimal taxSalary, decimal startMoney, List<IncomeTaxDetail> list, out decimal taxMoney)
{
    decimal exceedSalary = taxSalary - startMoney;

    var tmp = list.OrderBy(itd => itd.TaxRate).Where(itd => itd.MaxMoney >= exceedSalary && itd.MinMoney < exceedSalary).ToList();
    if (tmp.Count > 0)
    {
        taxMoney = exceedSalary * tmp[0].TaxRate - tmp[0].KouMoney;
    }
    else
    {
        taxMoney = exceedSalary * list[list.Count - 1].TaxRate - list[list.Count - 1].KouMoney;
    }
}

今天就寫到這吧,祝大家新年快樂!

祝大家2012新年快樂


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM