AA制分账计算器

输入每个人垫付的金额,就能精确到分算出每人应承担的金额,并给出转账次数最少的结清方案。也可以为吃得少的人设置较小的比例,或者把零头进位取整。

比例默认是1。没喝酒的人或小孩可以设为0.5等,他们的应付金额会按这个比例减少。

结账其实是两个问题

AA制分账看上去只是一次计算,实际上分成两步。第一步是每个人最终应该承担多少(分摊),第二步是谁转给谁,才能把多垫的钱还回去(转账)。 分摊是一个除法问题,转账则是把应收的人和应付的人配对的问题。这个计算器把两步分开展示,你可以先核对算式,再去转账。

基本公式是:应付金额 = 全员付款合计 × 自己的比例 ÷ 全部比例之和,结算金额 = 自己已付 − 应付金额。 结算金额为正表示别人欠你,为负表示你欠别人,全员的结算金额相加一定等于0。本工具以“分”为最小单位的整数运算,所以合计能精确到0。

除不尽的时候:零头怎么分

100元三个人分,每人是33.3333…元,可没人能转三分之一分钱。如果每人都按33.33元收,只收到99.99元,少了1分;如果每人都进到33.34元,会收到100.02元,多出2分。 本工具的做法是把多出来的零头,按各人精确应付金额的小数部分从大到小,每人加1分,让合计正好等于账单。 小数部分相同的,由垫付更多的人多承担这1分,因为这笔钱本来就要还给他,抵消之后不会增加转账笔数。

实际生活里,很多人嫌几分钱的转账麻烦,会凑成1角或1元。下表是页面构建时针对100.00元的账单计算出来的结果:精确到分的人均金额,以及每人进位到1角或1元时的金额与多收的数额。

人数精确人均精确到分(零头)按1角进位(多收)按1元进位(多收)
3人33.3333元33.33元(余1分)33.40元(0.20元)34.00元(2.00元)
6人16.6667元16.66元(余4分)16.70元(0.20元)17.00元(2.00元)
7人14.2857元14.28元(余4分)14.30元(0.10元)15.00元(5.00元)
9人11.1111元11.11元(余1分)11.20元(0.80元)12.00元(8.00元)
11人9.0909元9.09元(余1分)9.10元(0.10元)10.00元(10.00元)

“多收”指的是所有人都按进位后的金额付款时,比真实账单多出的总额。在本工具的进位模式下,除垫付最多的人之外,其他人都按进位后的金额承担,垫付最多的人吸收差额,使合计恰好等于账单。 所以他的应付金额会比别人略少。进位单位越大、人数越多,这个差距越大,因此在没有事先约定的情况下,精确到分是最公平的。 如果进位单位大到让垫付最多的人应付金额变成负数,工具会提示你换一个更小的单位。

平均分摊不公平时:用比例调整

有人没喝酒、中途才加入,或者是小孩,平均分摊对他们并不公平。这时可以给每个人设定一个比例,按比例分摊总额。比例可以理解为“相当于几份”。 三个大人(比例1)加一个小孩(比例0.5),比例之和是3.5,70.00元的账单里,每个大人承担20.00元,小孩承担10.00元。

如果大家点的东西差别很大,也可以把每个人实际吃喝的金额直接填进比例栏。只有比例关系有意义,所以直接填金额和填1、0.5的效果一样。 大家合着吃的菜,可以先除以人数,再加到每个人各自的合计里,然后填入。

怎样让转账笔数最少

结算金额不为0的人有n个,不管怎样都能在n−1笔以内结清:每次让应收最多的人和应付最多的人配对即可(贪心法)。 但这样得到的不一定是最少笔数。如果其中一部分人的结算金额加起来正好是0,他们就可以内部先结清,从而省掉转账。 如果n个人能分成g个互相独立、各自合计为0的小组,最少转账笔数就是n−g。

举个例子,六个人的结算金额分别是+8元、+8元、+3元、+2元、−18元、−3元。先拿金额大的配对要5笔。 不过+3元和−3元正好抵消,这两人之间转1笔就行,其余四人(+8、+8、+2、−18)再用3笔,一共4笔。 结算金额不为0的人在16人以内时,本工具会遍历所有合计为0的子集来找出真正的最少笔数;超过16人则改用贪心法(不超过n−1笔),结果里会注明用的是哪种方法。

经过验算的例子

例1:一个人统一买单。三个人聚餐,小王一次付了258.00元。每人应付86.00元,所以小王应收172.00元,另外两人各转给小王86.00元,2笔结清。一个人付全款时,转账笔数永远是人数减1。

例2:除不尽。小王为三人垫付了100.00元。精确人均是33.3333元,三个人的小数部分相同,所以垫付更多的小王多承担1分:小王33.34元,另外两人各33.33元。 另外两人各转给小王33.33元,小王共收到66.66元,加上自己承担的33.34元,正好是100.00元。

例3:比例不同。五个人共花了150.00元,小王垫付120.00元,小李垫付30.00元。小赵吃得少,比例0.5,其他人都是1,比例之和为4.5。 一份是33.3333元,小赵是16.6667元。各自向下取整后还差2分,小赵的小数部分(.67)最大,先得1分;另外1分给了在小数部分相同的几个人中垫付最多的小王。 于是应付金额是小王33.34元、小李33.33元、小张33.33元、小赵16.67元、小陈33.33元,合计150.00元。 转账方案是小陈→小王33.33元,小张→小王33.33元,小赵→小王16.67元,小李→小王3.33元,共4笔。

常见错误

不适合使用的场合

公司报销、合伙经营的出资结算、税务申报等有法律或会计意义的结算,请不要使用本工具。它只是用来计算朋友、家人、社团之间的私人费用分摊,不具备凭证效力。金额较大时,请务必核对合计与实际账单是否一致。

结果怎么用

隐私说明

你输入的姓名和金额只在浏览器内处理,不会发送到服务器。结果只是按输入值做的简单运算,正式转账之前请再核对一遍合计。

常见问题

除不尽的零头应该由谁多出?

没有固定规则,靠大家商量。本工具让精确应付金额小数部分较大的人每人多出1分,小数部分相同时由垫付更多的人多出,这样不会增加转账笔数。

转账笔数真的是最少吗?

结算金额不为0的人不超过16个时,会遍历所有合计为0的子集,所以是最少的。17人及以上用贪心法,不一定最少,但不会超过(人数−1)笔。

大家点的东西不一样,怎么填?

把每个人实际吃喝的金额(或比例)填进比例栏,总额就会按这个比例分摊。合着吃的菜先除以人数再加进去。

没付钱的人也要填吗?

要。把已付金额设为0放进名单,这样他会被算进人数,应付金额才准确。

比例为0的人会怎样?

他的应付金额是0元。如果他自己垫付过钱,会被当作应收全额退款的人。如果所有人的比例都是0,就无法计算。

人数有上限吗?

没有上限。但结算金额不为0的人超过16个时,会改用近似方法来安排转账。