发明内容
基于此,本说明书提供了一种收益分配方法、装置及计算机设备。
根据本说明书实施例的第一方面,提供一种收益分配方法,所述方法包括:
根据各用户的收益金额确定单个用户的截位损失以及多个用户的截位总损失;
根据所述截位损失确定每个用户的分类位,并按类别将分类位与该分类位对应的用户关联存储,所述分类位是自所述截位损失的最高位起指定位数的数值;
根据待分配的目标用户数和分类位的大小确定目标分类位,将所述截位总损失分配给目标分类位对应的目标用户。
根据本说明书实施例的第二方面,提供一种收益分配装置,所述装置包括:
计算模块,用于根据各用户的收益金额确定单个用户的截位损失以及多个用户的截位总损失;
分类模块,用于根据所述截位损失确定每个用户的分类位,并按类别将分类位与该分类位对应的用户关联存储,所述分类位是自所述截位损失的最高起指定位数的数值;
分配模块,用于根据待分配的目标用户数和分类位的大小确定目标分类位,将所述截位总损失分配给目标分类位对应的目标用户。
根据本说明书实施例的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现权任一实施例所述的方法。
根据本说明书实施例的第四方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现任一实施例所述的方法。
应用本说明书实施例方案,在计算得到用户的截位损失以及截位总损失后,根据用户的截位损失确定用户的分类位,并根据分类位对用户进行分类,然后根据待分配的目标用户数和分类位的大小确定目标分类位,将所述截位总损失分配给目标分类位对应的目标用户。通过分类位对用户进行分类后,再依据需要分配尾差的目标用户数以及分类位的大小确定目标用户,可以大大减小尾差分配过程中的排序量和排序次数,降低了对数据库CPU和内存的消耗。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
诸如余额宝等各种理财产品都需要定期给用户分配收益,在给用户分配收益时,收益金额往往只精确到分,因而常用的分配方法是在计算得到各个用户的收益金额后,先将每个用户的收益金额的数值保留到分,即将分后面的数值舍弃,被舍弃的这部分就是每个用户的截位损失,由于每个用户都存在截位损失,会导致收益未分配完,每个用户未分配完的收益的总和被称为截位总损失。通常根据各个用户截位损失的大小将未分配完的收益给某部分用户分配尾差,比如,将用户收益金额保留至分,则将未分配完的截位总损失再给部分截位损失较大的用户分配1分钱尾差。通常在进行尾差分配的时候,会将各个用户的截位损失从大到小进行排序,然后根据截位总损失确定待分配尾差的用户数量,基于待分配尾差的用户数量选取出截位损失较大的部分用户,给这部分用户分配尾差。由于像余额宝等多数理财产品,其用户数量往往多达上千万,系统要逐一去对这上千万用户的截位损失排序,非常消耗系统的内存,会严重影响系统的稳定性。
为了解决上述问题,本说明书实施例提供一种收益分配方法,所述收益分配方法可用于各种执行收益计算的系统,如图1所示,所述方法可包括以下步骤:
S102、根据各用户的收益金额确定单个用户的截位损失以及多个用户的截位总损失;
S104、根据所述截位损失确定每个用户的分类位,并按类别将分类位与该分类位对应的用户关联存储,所述分类位是自所述截位损失的最高位起指定位数的数值;
S106、根据待分配的目标用户数和分类位的大小确定目标分类位,将所述截位总损失分配给目标分类位对应的目标用户。
每次收益结算的时候,可以先根据用户的保有和该理财产品的总收益计算得到每个用户的收益金额,然后根据需要将收益金额保留至小数点后的预定位数,比如可以保留至分,也可以保留至角。将用户收益金额保留至小数点后的预定位数后,每个用户收益金额被舍弃的那部分即为每个用户的截位损失,比如,计算得到某个用户的收益金额为100.234567元,将收益金额保留至分,其余部分舍弃后其收益金额为100.23元,则该用户的截位损失为0.004567元。将每个用户的截位损失累计后便可以得到截位总损失,这部分截位总损失是未分配完的收益,可以根据预先设定的尾差金额,给一部分用户分配尾差,比如将每个用户的收益金额保留至分,然后再将截位总损失给一部分用户分配1分钱尾差,当然,也可以将收益金额保留至角,然后再将截位总损失给一部分用户分配1角钱尾差,这个可以根据实际需求设定,不在本申请的限定范围内。
由于用户数量较多,如果直接将用户的截位损失排序,确定待分配的尾差的目标用户,那会造成很大内存消耗。为了减少要排序数据的数量以及排序次数,可以根据用户的截位损失先确定用户的分类位,其中分类位是每个用户的截位损失的最高位起的指定位数的数值,比如用户的截位损失为0.004567元,可以取截位损失中最高位起的前两位的数值作为该用户的分类位,即45。然后可以根据分类位将用户进行分类,将每个分类位与其对应的用户关联存储。当然,分类位的所取的位数可以根据实际情况设置,可以取截位损失中最高位起的前1位、前两位或者前三位,具体位数可以根据实际需求灵活确定,本申请不作限制。由于分类位的位数较少,以分类位取截位损失最高位起的前两位为例,由于只取两位数,因而分类位的类别最多也就是00-99等100种情况。然后可以根据分类位将用户进行分类,比如分类位都为45的分成一类,分类位都为67的分为一类,按照分类位将用户分类,并将分类位和分类位对应的用户存储后,可以再根据分类位的大小以及待分配的目标用户数确定目标分类位,其中,待分配的目标用户数可以根据截位总损失以及设定的尾差计算得到,比如,截位总损失为10.56元,尾差为0.01元,则待分配的目标与用户数即为1056个。得到待分配的目标用户数后,便可以根据目标用户数从分类位中确定目标分类位,待分配尾差的目标用户为目标分类位对应的用户里面的全部或部分。
在某些实施例中,在计算得到待分配的目标用户数后,可以根据分类位的大小确定分类位的优先级,并确定所述分类位对应的用户数;然后从优先级最高的分类位开始,基于目标用户数和当前分类位对应的用户数确定目标分类位。举个例子,假设计算得到的目标用户数为100,分类位有23、56、42、75、07,将分类位从大到小排序后的顺序为:75、56、42、23、07,因而,各分类的优先级顺序为:75>56>42>23>7,然后确定每个分类位对应的用户数量,比如75(用户数量为35个),56(用户数量为55个),42(用户数量为15个),23(用户数量为25个)、07(用户数量为30个),根据目标用户的数量100以及各分类位对应的用户数,可以确定尾差是要分配给分类位75、56以及42对应的用户,因而可以将分类位75、56以及42确定为目标分类位。
在确定好目标分类位后,可以从目标分类位对应的用户中确定需要分配尾差的目标用户,然后将截位总损失分配给这些目标用户。在某些实施例中,如果待分配的目标用户数刚好等于目标分类位对应的用户数的总和,则可以直接给目标分类位的所有用户都分配尾差。当然在某些情况下,可能待分配的目标用户数大于目标分类位对应的用户数总和,这时只能给最小目标分类位中的部分用户以及其他分类位中的所有用户分配尾差。在某些实施例,可以根据最小分类位对应的用户的截位损失的大小去筛选待分配尾差的用户,比如,可以先计算最小分类位对应的用户中有多少用户是可以分配尾差的,然后将最小分类位对应的用户的截位损失由大到小排序,选择截位损失排在前面的那部分用户作为可以得到尾差的目标用户。
在某些实施例中,截位损失可以取用户收益金额小数部分第二位之后的数值,然后分类位可以取截位损失的小数部分的第三位和第四位的数值,比如收益金额为100.23456,截位损失取0.00456,对应的分类取45。当然,截位损失可以根据金额实际需要保留的位数设定,而分类也可以根据实际使用场景设定。
为了进一步解释本说明书实施例提供的收益分配方法,以下再以一个具体实施进一步解释。
余额宝每天都需要给用户分配收益,一般用户收益金额只保留到分,分后后面的数据都会舍弃,舍弃的部分为每个用户的截位损失,每个用户的截位损失累加则为截位总损失,为了将截位总损失再分配给截位损失较大的用户,一般会将截位损失按大小排序,然后给排在前面的一部分用户在分配1分钱尾差,由于余额宝用户数量是千万级别,因而会对CPU造成非常大的消耗,影响系统稳定性。为了解决这个问题,提供了一种的高性能的计算装置,如图2所示该计算装置22包括计算模块221和分类模块222,通过该计算装置来进行用户的收益分配,可以减小CPU的消耗。收益的具体分配流程参考图2,清算系统21会向计算装置22发送余额宝收益分配的指令(S21)。计算装置22接收到该指令后,计算装置22中的计算模块221会根据用户的保有和总收益计算每个用户的收益,然后将用户的收益保留到分,舍弃分后面的数据,并记录用户保留至分后的收益(S22)。然后将分后面的数据作为截位损失,并记录每个用户的截位损失(S23),计算模块221会根据各个用户的截位损失计算出截位总损失,然后根据截位总损失和待分配的尾差金额计算待分配尾差的目标用户数(S24)。在得到各个用户的截位损失后,计算模块221会将用户的截位损失发送给分类模块222(S25)。分类模块222得到各个用户的截位损失后,会确定每个用户的分类位,然后根据分类位对用户进行分类,将分类位相同的用户分为一类,记录每个分类位及其对应的用户,并统计每个分类位对应的用户数量,将分类位、分类位对应的用户以及用户数发送给计算模块221(S26)。计算模块221会按照分类位的大小确定每个分类位的优先级,根据待分配尾差的用户数以及每个分类位对应的用户数,从最高优先级的分类位开始,确定目标分类位,待分配尾差的用户为目标分类位中对应的用户(S27)。如果目标分类位对应的用户数刚好等于待分配尾差的目标用户数,则给目标分类位对应的所有用户分配尾差(S28)。如果目标分类位大于待分配尾差的目标用户数,则将最小的目标分类位的用户的截位损失按照大小排序,从最小的目标分类位中筛选出一部分截位损失较大的用户(S29),给筛选出的部分用户以及其它目标分类位的所有用户分配尾差(S210)。然后将计算得到的各用户的最终收益返回给清算系统21(S211)。
举个例子,假设我们有5个用户,保有分别是10000,9000,8000,7000,5000,总保有为39000,假设此时总收益为380元。则分片收益率为380/39000=0.00974358974359。按照每个用户的保有,需要分配的收益分别为:97.435897435897436,87.69230769231,77.94871794872,68.20512820513,48.71794871795,由于支付宝体系内金额最小单位为元,每个用户的收益最终都会精确到分,因而每个用户分配的收益为97.43,87.69,77.94,68.20,48.71。此时,可计算出每个用户的截位损失为:0.005897435897436,0.00230769231,0.00871794872,0.00512820513,0.00794871795,计算模块在计算出每个用户的截位损失后,会将将截位损失发送给分类模块。分类模块会确定每个用户的分类位,比如可以将截位损失小数点后的第三和第四位对应的数值作为分类位,则对应值为58,23,87,51,79。分类模块会记录每个用户的分类位,并将分类位相同的用户分为一类,且统计好每个分类位对应的用户数量。计算模块会根据各个用户的截位损失计算出截位总损失,然后计算已分配的收益,我们已分配了379.97元,还剩余0.03元的截位总损失未进行分配。根据统计的各分类位对应的用户数量,我们得到分类位58的用户数为1,分类位23的用户数为1,分类位87的用户数为1,分类位51的用户数为1,分类位79的用户数为1。由于截位总损失有0.03元,我们知道还需要给3个用户分配1分钱尾差。我们按照分类位的大小将分类位从大到小排序,87、79、58、51、23,可以确定前三个分类位为目标分类位,需要给前三个分类位的用户需要分配1分钱尾差。当然,为了方便解释,这个例子列举的用户数较少,最小分类位58正好有一个用户,因而不需要对最下分类位的用户进一步筛选。假设此时分类位58对应的用户有3个则需要从这3个用户里面选择一个出来进行1分钱的尾差分配,则需对58分类位的用户按照截位损失从大到小的进行排序,并选出截位损失最大的那个用户作为需要分配收益的用户。最后根据分类的大小可以确定需要给第1、3、5个用户分配1分钱尾差,各用户的收益为97.44,87.69,77.95,68.20,48.72。
以上实施例中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述,因此上述实施方式中的各种技术特征的任意进行组合也属于本说明书公开的范围。
如图3所示,是本说明书一个实施例的收益分配装置,所述装置30可包括:
计算模块31,用于根据各用户的收益金额确定单个用户的截位损失以及多个用户的截位总损失;
分类模块32,用于根据所述截位损失确定每个用户的分类位,并按类别将分类位与该分类位对应的用户关联存储,所述分类位是自所述截位损失的最高非零位起指定位数的数值;
分配模块33,用于根据待分配的目标用户数和分类位的大小确定目标分类位,将所述截位总损失分配给目标分类位对应的目标用户。
在一个实施例中,根据待分配的目标用户数和分类位的大小确定目标分类位包括:
根据所述分类位的大小确定所述分类位的优先级,并确定所述分类位对应的用户数;
从优先级最高的分类位开始,基于目标用户数和当前分类位对应的用户数确定目标分类位。
在一个实施例中,将所述截位总损失分配给目标分类位对应的目标用户的过程包括:
如果所述目标分类位对应的用户数总和大于待分配的目标用户数,则将所述截位总损失分配给最小目标分类位对应的部分用户和其他目标分类位对应的所有用户。
在一个实施例中,所述部分用户依据所述截位损失的大小从所述最小目标分类位对应的用户中筛选得到。
在一个实施例中,所述截位损失为截取的收益金额小数部分第二位数之后的数据,所述分类位为所述截位损失小数部分第三位和第四位对应的数值。
上述装置中各个模块的功能和作用的实现过程具体详情见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书装置的实施例可以应用在计算机设备上,例如服务器或智能终端。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在文件处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本说明书装置所在计算机设备的一种硬件结构图,除了图4所示的处理器402、内存404、网络接口406、以及非易失性存储器408之外,实施例中装置所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
相应地,本说明书实施例还提供一种计算机存储介质,所述存储介质中存储有程序,所述程序被处理器执行时实现上述任一实施例中的方法。
相应地,本说明书实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例中的方法。
本申请可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本领域技术人员在考虑说明书及实践这里公开的说明书后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。