费用分摊问题

原文:费用分摊问题

在现实生活中,我们可能会遇到这样的问题:三个人合伙买一件商品,假如这件商品的价格为1。三个人平摊的费用为1/3,可以用分数表示,但是计算机处理最后的结果是小数0.33(保留两位小数),这样0.33*3=0.99<1,于是就必须有一个人要付0.34。所以在处理费用分摊问题时,并不是每人承担的费用都是总费用*平摊的百分比,对于1/5,2/5,2/5这样的比例算出的结果是没有问题的。总之,要确保分摊的费用之和等于总费用,采取前两个人分别承担的费用=总费用*百分比,最后一个人承担的费用=总费用-(前两个人承担的费用之和)这样的方法就没有问题了。概括的说,前面的费用(除最后一个的费用)都采用总费用*百分比的方法,而最后一个采用(总费用-前面的费用之和)的方法,这样就确保了分摊的费用与总费用没有误差。

虽然前面的方法是解决了费用分摊的问题,但那方法只是一组费用分摊的问题,但多组费用分摊放到一起的时候,每组的总价不一样,百分比,怎么解决?少量的数据,人的肉眼还可以区分哪些Item是一组,但是大量数据出现时,又怎样处理呢?为了更好理解,我列举数据和编写程式。

No GW TotalGW Fee
1 2.3 2.3  
2 1 3  
2 1.2 3  
2 0.8   3  
3 2.2 2.4  
3 0.2 2.4  
4 3.4 3.4  
5 3.5 3.5  

首先,我们将数据安照No分组排序;其次,如果按重量分摊的话,多个item分摊的总重TotalGW是不变的,而每组的GW的之和等于每组的TotalGW,这样分摊的百分比就是GW/TotalGW。No号不重复的,费用承担百分比=GW/TotalGW=100%,也就是承担全部费用;最后强调一点,每组的总费用都不相同,但是通过每组的No可以找到对应的总费用,1--->x,2--->y,3--->Z等,同一组的总费用是相同的。

因为每组的总费用不一样,就要有个标志变量区分组别;总费用变量存对应组的总费用,用于按照百分比*总费用计算分摊费用; 剩余费用变量,用于求分摊组最后一行的费用。

       public DataTable Calculate(DataTable dt)
        {
            string groupNo = "";//组号标志变量
            string no;//DataTable中的DataRow的No
            decimal totalFee = 0.00m;//总费用
            decimal remaining = 0.00m;//剩余费用,用于求一组中最后一行的分摊费用
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                no = dt.Rows[i]["No"].ToString();
                if (groupNo != no)//这一行跟上一行的No进行比较,判断是否是同一组别
                {                    //不同组的处理办法
                    if (i != 0)
                    {
                        dt.Rows[i - 1]["Fee"] = remaining + Convert.ToDecimal(dt.Rows[i - 1]["Fee"]);//重新为上一行的fee赋值,因为上一行是上一组的最后一行,分摊                                                                                                 费用=总费用-同组下的前面分摊费用之和
                    }
                    groupNo = no;//改变标志组号变量,进行下次比较
                    totalFee = GetTotalFee(no);//获取该组对应的总费用
                    remaining = totalFee;//初始化剩余费用
                }
                dt.Rows[i]["Fee"] = totalFee * Convert.ToDecimal(dt.Rows[i]["GW"]) / Convert.ToDecimal(dt.Rows[i]["TotalGW"]);//按照百分比*总费用求分摊费用
                remaining -= Convert.ToDecimal(dt.Rows[i]["Fee"]);//更新剩余费用
            }
          if(dt.Rows.Count>2)
          {
              dt.Rows[dt.Rows.Count-1]["Fee"]=remaining+Convert.ToDecimal(dt.Rows[dt.Rows.Count-1]["Fee"]);//防止最后一行与前一行同组,重新赋值
           }
            return dt;
        }

        public decimal GetTotalFee(string no)
        {
             return 12.0m;   //返回每组对应的总费用
        }

  

时间: 2024-08-08 21:59:53

费用分摊问题的相关文章

5.4 定期成本费率分摊(成本还原)

5.4.1   业务方案描述 1. 实现制造成本按实际成本核算的要求,对于当期实际发生的直接人工.制造费用要按定额工时进行分摊计入产品成本中. 2. 主要是为了满足直接人工和制造费用的成本还原需要所使用.系统标准功能中,涉及"期间成本"相关的查询事务处理较少,且没有事务处理成本信息,不方便查询对帐. 3. 在当前期间成本核算的基础上,通过建立费用分摊工作台,统计成本相关数据,主要是定额工时,待分摊的直接人工.制修费用,分析审核后进行分摊,并将分摊的实际费率改写当期的期间费率即可. 5.

关于成本核算方法、步骤、成本分析的简单回复

关于成本核算方法.步骤.成本分析的简单回复成本核算的方法依据企业生产产品的特点来定:主要看产品是否是多步骤生产(生产工艺的特点):半成品是否有销售的情况(假设有销售,可能须要採用分步核算,以便准确核算半成品的成本):工作(成本/生产)中心是依照产品来分还是工艺来分.怎样核算成本:首先归集产品的材料成本,一般都须要技术部门提供产品的BOM(物料清单),以确保按订单或者生产计划生产的时候领料的准确.(通常会问生产线出现来料不良和损坏怎么处理:退仓并补领就可以,损坏部分须要当月预提计入制费,损坏材料报

atitit.Sealink2000国际海运信息管理系统

操作手册 目录 第一章 使用说明 第一节 系统登录 双击桌面的系统执行程序图标,进入选择数据库的对话框,如图1-1所示.选择相应的数据库后,点击[OK]按钮或在所选数据库上双击,进入登录身份校验对话框,如图1-2所示,输入正确的用户名和口令后,点击[OK]按钮,即可进入此系统. 图1-1[进入数据库选择]对话框 图1-2[登录]对话框 第二节 功能模块介绍 1.2.1 基础数据 在系统的『Basic Data』菜单下面的,都是系统基础数据方面的功能设置菜单.主要是系统关于公共的.需要规范的数据的

设计模式学习第一天:23种设计模式(全)

C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体

税务案例(作者单位:山东鲁信税务师事务所)

目录公司董事领取报酬可筹划新办商业企业慎选优惠年度减免期多分利可以少补税委托开会可避免会议费被认定为是价外费用巧签投资合同享受节税收益合理设置机构享受最低税率合理利用资源综合利用税收优惠政策个人独资企业财产出租转让的筹划策略醋酸制法不同 节税效果迥异房地产开发经营与资产管理活动税务筹划思维与方法废旧物资收购.加工可筹划合法避税:纳税人“辩护律师”不要忽视所得税优惠政策影响关联企业借款利息扣除的筹划打包出售:变资产转让为资本转让薪酬激励可筹划用转让定价法进行纳税筹划 28企业重组不可忽视契税筹划

面向对象思想

面向对象思想 编辑 面向对象的程序设计语言必 须有描述对象及其相互之间关系的语言成分.这些程序设计语言可以归纳为以下几类:系统中一切事物皆为对象:对象是属性及其操作的封装体:对象可按其性质划 分为类,对象成为类的实例:实例关系和继承关系是对象之间的静态关系:消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式:方法是消息的序列. 中文名 面向对象思想 性    质 思想 类    别 程序设计语言 领    域 软件 目录 1 简介 2 理解 3 面向对象 4 存在问题 5 概念特征 6 要

面向对象编程思想

http://blog.csdn.net/yzh648542313/article/details/34157593 面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计. 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单

房地产开发经营与资产管理活动税务筹划思维与方法

房地产开发经营与资产管理活动涉及比较多的税务问题,本文试就其税务筹划思维与方法扼要进行综述式探讨,综述的展开不以税种类别作为排序依据,而主要遵循涉税思维之渐进性. 一.关注不同的产品销售方式之间的税政差别 现行税法规定:房地产开发企业开发.建造的以后用于出售的住宅.商业用房,以及其他建筑物.附着物.配套设施等应根据收入来源的性质和销售方式,按下列原则分别确认收入的实现:(一)采取一次性全额收款方式销售开发产品的,应于实际收讫价款或取得了索取价款的凭据(权利)时,确认收入的实现.(二)采取分期付款

LMT NEW PBS作业排队调度系统的回报与功能

LMT NEW PBS作业排队调度系统的回报与功能 LMT NEW PBS作业管理系统的开发,提出了一种适合集群环境下的高效资源分配与利用方案,并给出了详细的设计过程.深入分析了作业管理系统的内部运行机制.安全机制.调度策略等方面问题,提出了改进方案. LMT NEW PBS是计算网络和广域分布式计算的支撑技术 使用LMT NEW PBS作业排队调度系统,您可以: 提高企业生产率和市场反应速度 提高计算资源投资回报率 (ROI) 更加高效地进行计算处理分析 更快地推出新产品 确保资源利用最大化