结账其实是两个问题
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笔。
常见错误
- 把没付钱的人漏掉。没出钱的人也要以0元加入名单,否则人数不对,人均金额会偏高。
- 把每人进位后的金额乘以人数当成账单。账单永远以实际支付的总额为准,进位后的合计会超过它,也就是上表中的“多收”。
- 优惠券、立减、积分。如果某个人的支付方式享受了优惠,请填实际扣款金额。这笔优惠归谁,由大伙商量决定。
- 服务费和小费。请填入账单上的最终金额;另外单独付的,加到付款人的金额里。
- 多种货币混用。本工具只处理单一币种,请先按实际汇率换算成同一种货币再输入。
不适合使用的场合
公司报销、合伙经营的出资结算、税务申报等有法律或会计意义的结算,请不要使用本工具。它只是用来计算朋友、家人、社团之间的私人费用分摊,不具备凭证效力。金额较大时,请务必核对合计与实际账单是否一致。
结果怎么用
- 点击“复制结果”,可以把转账清单直接粘贴到群聊里,让大家看到同一组数字。
- 零头很小的话,也可以约定下次再抵。这时把零头处理设成较大的进位单位会更省事。
- 固定的聚会,可以先让一个人收齐会费,再一次性结算发票总额,这样转账笔数最少。
- 规划旅行预算可以用旅行预算计算器先估出人均费用;折扣和税费的计算可以用百分比计算器,小费可以用小费计算器。
隐私说明
你输入的姓名和金额只在浏览器内处理,不会发送到服务器。结果只是按输入值做的简单运算,正式转账之前请再核对一遍合计。
常见问题
除不尽的零头应该由谁多出?
没有固定规则,靠大家商量。本工具让精确应付金额小数部分较大的人每人多出1分,小数部分相同时由垫付更多的人多出,这样不会增加转账笔数。
转账笔数真的是最少吗?
结算金额不为0的人不超过16个时,会遍历所有合计为0的子集,所以是最少的。17人及以上用贪心法,不一定最少,但不会超过(人数−1)笔。
大家点的东西不一样,怎么填?
把每个人实际吃喝的金额(或比例)填进比例栏,总额就会按这个比例分摊。合着吃的菜先除以人数再加进去。
没付钱的人也要填吗?
要。把已付金额设为0放进名单,这样他会被算进人数,应付金额才准确。
比例为0的人会怎样?
他的应付金额是0元。如果他自己垫付过钱,会被当作应收全额退款的人。如果所有人的比例都是0,就无法计算。
人数有上限吗?
没有上限。但结算金额不为0的人超过16个时,会改用近似方法来安排转账。