zoukankan      html  css  js  c++  java
  • 工作两个周的一点总结

    元旦放假三天,终于有时间可以歇一歇了。到现在已经工作两个周了,这期间如果用一个字形容是:忙,用另外一个字形容就是:累。

    入职第一天,项目经理给我简单的介绍了一下公司使用的框架,然后给我分配了一个任务练练手,完成目前正在做的项目的基础数据部分最简单的增删查改,还好,照着现有的例子很快就完成了。就这样,从第一天开始就参与到项目中来,每天都有任务。工作之前,我还有一个项目没有完成,只能在晚上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新年快乐

  • 相关阅读:
    Security » Authorization » 要求处理器中的依赖注入
    Security » Authorization » 基于自定义策略的授权
    Security » Authorization » 基于声明的授权
    Security » Authorization » 基于角色的授权
    CentOS下下载软件,不安装的方法
    rsync+sersync+inotify实现服务器间文件同步之一
    linux查看机器负载
    htpasswd建立和更新存储用户名、密码
    由异常掉电问题---谈xfs文件系统
    Flashcache基本使用及注意事项
  • 原文地址:https://www.cnblogs.com/nianming/p/2309219.html
Copyright © 2011-2022 走看看