谁欠谁多少钱:分摊计算全解析
五个人,十七笔开支,四个不同的付款人。问题永远只有一个,答案也只有一个:每个人该付多少,付给谁。
阅读约 7 分钟
您刚结束一次五人周末小聚回到家。有人付了房费,有人付了采购的食材,还有一个人付了汽油和过路费,另外两人什么都没垫付。群聊里的对话总是以"那么,我们来算算"开头,却很少有个清楚的结尾。
计算本身并不难,难的是把它说清楚、按对的顺序算、还不搞错问题本身。
唯一重要的公式
对每个人来说:
余额 = 本人垫付的金额 − 本人应承担的金额 + 本人还给他人的金额 − 本人收到的金额
余额为正,说明别人欠他钱。余额为负,说明他欠别人钱。
还有一条每次都值得验证的性质:
一个群体所有人的余额加起来,必然等于零。
这不是一句漂亮话,而是一个检验标准。任何人垫付的每一欧元,都由某些人(包括垫付者本人)共同承担。如果您算出的余额加起来不是零,说明您漏记了一笔开支、漏了一个参与者,或者把某笔还款算错了方向。先验证总和是否为零,再讨论别的。
最容易搞错的地方:把"垫付的钱"和"该还的钱"混为一谈
这是目前为止最常见的错误,而且乍看还挺有道理。
很多人是按每笔开支单独计算的:"Alice 付了 300 欧元,我们每人还她 100 欧元。"接着算食材费:"Bruno 付了 90 欧元,我们每人还他 30 欧元。"结果是:Chloé 要给 Alice 100 欧元、给 Bruno 30 欧元,Alice 要给 Bruno 30 欧元,Bruno 要给 Alice 100 欧元。四笔转账,其中两笔还互相抵消。
按余额计算,结果在经济上完全相同,却只需要两笔转账。这个差别不是形式上的:每一笔转账都是一次可能忘记、算错金额,或让人白等的机会。
结清所有欠款的最短路径
余额算出来之后,剩下的问题是谁付给谁。规则是这样的:把欠款方和收款方分别列出来,用最大的欠款去抵消最大的应收款,直到全部清零。
以上面的例子为例:Chloé 欠 130,Bruno 欠 40,Alice 应收 170。Chloé 付给 Alice 130 欧元,Bruno 付给 Alice 40 欧元。两笔转账,人人清零。
记住这条上限:n 个人,最多只需要 n − 1 笔转账。五个人的情况下,四笔转账必然够用,通常两三笔就能解决。如果您算出的转账数超过这个数字,说明还是在按每笔开支单独计算。
无法整除的那一分钱
三个人,一笔 10 欧元的开支。每人应付 3.333…欧元。精确到分,只能写成 3.33 或 3.34,而 3.33 × 3 = 9.99,还差一分钱。
直接舍去是最糟糕的做法:这样一来总额就对不上开支金额,"总和为零"这条铁律也就被打破了。开支笔数一多,误差会越来越明显,整个账目也就失去了可信度。
正确的方法叫最大余数法:先把每人应付的金额向下取整,再把剩下的分,依次分给小数部分最大的那几个人。三人分摊 1 欧元:0.34、0.33、0.33,加起来正好是 1 欧元。
有两点值得特别强调:
- 各人份额加总永远等于开支的实际金额,精确到分;
- 分配方式是确定性的:同样的数据算两次,结果必须一样。一分钱在不同页面之间飘忽不定,比明显的计算错误更能摧毁信任。
分摊开支的四种方式
不是所有开支都按人头平分,一个只会平分的记账工具,会逼着您去凑数。
| 方式 | 适用场景 | 例子 |
|---|---|---|
| 平均分摊 | 最常见的情况 | 采购食材、加满一箱油 |
| 按份数分摊 | 有人算两份 | 朋友群里的一对情侣、两人合住一间房 |
| 按百分比分摊 | 事先定好固定比例 | 按收入比例 40 / 60 分摊 |
| 按实际金额分摊 | 账单上写明了谁点了什么 | 餐厅账单、逐项列明的发票 |
不是所有人都摊上的开支
这是聚会第一晚之后最常见的情况,也是最容易搞乱表格的情况。
六个人里有四个人去了餐厅。这笔 92 欧元的账单不该由六个人分,而应该由这四个人分。每个人的余额必须立刻反映这一点,而不必为"周二那个小分队"另开一张表。
这正是为什么一个好用的记账工具要按该笔开支的参与者来计算,而不是按群组的全体成员来计算。群组决定谁能查看和录入,而具体某笔开支决定谁来付钱。
Kotisso 具体是怎么做的
Kotisso 正是按照上述方法运作的:每笔开支都可以按四种方式之一分摊,所有人的余额实时同步更新,"总和为零"的原则始终受到校验,还款方案则给出最短路径。
有两点比较特别,值得单独说明:
- 汇率在录入时就已锁定。 一笔用泰铢支付的开支,会按您录入时的汇率一次性换算,此后永远不再变动。如果每次都去抓取当天的实时汇率,会导致旅行结束三个月后,每天早上所有人的余额还在变来变去;
- 账目可以导出,支持表格或 PDF 格式。文件中每个人占一列,每一行加总为零,每列加总即为该人的最终余额。这样一来,"总和为零"这条铁律在 Excel 里就能直接验证,比任何解释都更快平息争论。
整套记账功能完全免费:四种分摊方式、导出、凭证和还款方案,都不收费。
常见问题
是不是每笔开支之后都要立刻还款? 不需要,这样做反而适得其反:转账次数成倍增加,结果却完全一样。让余额先累积,到最后统一结清即可,合租的情况可以每月结一次。
如果有人替群组以外的人垫付了钱,该怎么办? 不要把这个人虚构成一个"幽灵成员"。按实际分摊的金额记录这笔开支,等对方还钱时把那部分记作一笔还款,或者单独记一笔开支处理。
能不能中途加人? 可以,新加入的人余额从零开始:之前的开支跟他无关,除非您明确修改这些开支把他也算进去。这才是正确的做法,也是最让人意外的一点。
如果某笔余额一直没结清怎么办? 它会一直留在账目里,所有人都能看到,直到有人记录一笔还款为止。这也是为什么不能在欠钱的状态下退出群组:这样一来,其他人账上的钱就凭空消失了。