旅行费用结算计算器

为每笔支出定好谁分摊多少,再加上已经转过的钱,生成每人余额和剩下的转账方案。

本计算器只计算你填入的数值。它不查询汇率,只按你自己填的汇率换算;它不执行银行转账;也不保存你填的姓名和金额,不会把它们留在地址栏里。

结算基准

写明这是哪次旅行的结算,复制结果后就不会弄混。它不参与计算。
所有金额都要用这一种货币填写。用其他货币花的钱,请自己确认实际被扣的金额,换算成这种货币再填。
勾选后,结果上会加上按估算值计算的标记。计算结果本身不会改变。 只要有支出是按汇率换算填入的,不论这个复选框如何,结果上都会自动加上估算值标记。

参与者

可填 2 到 20 人。不必是真名,也不要填电话号码或银行账号。

支出与退款

为每笔支出定好付款人和分摊权重。若要按日期拆分住宿费,就每晚各加一笔支出,只给那晚实际住的人填 1。

已经互相转过的钱

这是旅行中已经转出去的钱。它不是支出,而是抵减余额的结算,所以不要再当成支出填一遍。

如果还没有互相转过钱,留空即可。

还没有计算。先填好参与者和支出,再点生成结算表。

计算方法

按下面的顺序计算。所有金额都按结算货币最小单位的整数处理,因此中间不会产生小数误差。

  1. 每笔支出中,各人的理想分摊额等于总额乘以自己的权重再除以权重之和,每个值都向下取整到最小单位。
  2. 向下取整后剩下的最小单位,从被舍去小数部分最大的人开始,每次分 1 个。因此分摊额之和永远与总额完全相等。
  3. 如果连小数部分都相同、无法排序,就按参与者 ID 升序领取。本页面的 ID 按添加参与者的先后顺序生成,所以名单上靠前的人先拿到 1 个单位。在界面上调整显示顺序,不会改变零头归谁。
  4. 每人的余额,等于代付金额减去应分摊金额,加上已经转出的钱,再减去已经收到的钱。收到退款的人,其代付金额会相应减少,因此可能显示为负数。
  5. 所有人余额相加正好是 0。计算核心会直接检验这个条件,一旦不成立就不给出结果,而是报错停止。
  6. 退款按与原支出完全相同的权重做负数分摊。累计退款不能超过原支出的金额。
  7. 转账建议的做法是,依次让该收最多的人和该给最多的人相互抵销。金额相同时按参与者 ID 升序排列。
  8. 按汇率换算的支出,用原币种金额乘以汇率,再四舍五入到结算货币的最小单位,正好一半时进位。乘法和取整都用分数进行,因此不会产生小数误差。这一步换算只在最开头做一次,在分摊之前完成。
  9. 只要还有一笔支出没换算完,就既不生成每人余额,也不生成转账方案。因为货币混在一起的结算表是错的。

屏幕上看到的金额是加了位分隔符的显示用字符串。不要拿这些数字再加一遍来验算,请看表里一并给出的合计。

分摊住宿费的两种方法

住宿费的结果取决于大家怎么约定。本计算器不替你决定哪种更公平,两种方法都能准确保住总额。

按每晚实际入住的人分摊
每一晚各加一笔支出,只给那晚实际住下的人填 1。如果各晚房价不同,就填当晚的实际房价。如果房费要付,那晚却没有任何人住,计算会停下来。你得先定好由谁承担。
按人乘以晚数的比例分摊
把住宿费总额作为一笔支出填入,权重里填各自的住宿晚数。请注意,因为没人使用的空房而产生的费用,同样会按总晚数的比例摊到大家头上。

虚构示例

这是用于演示界面的虚构示例,并非真实住宿价格或某个预订平台的条件。

甲、乙、丙三人用 USD 结算,450 美元的住宿费由甲付了。甲和乙住了 2 晚,丙住了 1 晚。

  • 按每晚实际入住的人分摊来填,第 1 晚的 225 美元由三人分,第 2 晚的 225 美元由甲和乙分。分摊额是 187.50 / 187.50 / 75.00 美元。
  • 示例按钮就是按这种方法填的。结果是甲收 262.50 美元,乙给 187.50 美元、丙给 75.00 美元就结清了。
  • 按人乘以晚数的比例来填,450 美元作为一笔,权重是 2 / 2 / 1,得到 180 / 180 / 90 美元。两种方法的合计都是 450 美元。

点示例后,你现在填的值会被换成示例值。可以用页面上方的撤销按钮还原。

常见问题

它和普通的 AA 制计算器有什么不同?
普通的 AA 制计算器是把一笔总额按人数平摊,或者直接写下每个人的金额。想加上小费、马上看到人均多少时,那种更快。本计算器可以填入多笔支出,为每笔支出分别设定分摊的人和权重,并计入退款与已经互相转过的钱,生成每人余额和剩下的转账方案。如果只是把一顿饭钱平摊,请用普通的 AA 制计算器。
转账方案是次数最少的吗?
不是。它是依次让该给最多的人和该收最多的人相互抵销,所以同样的输入总会得到同样的表,但理论上可能存在次数更少的组合。请把它当作结清的一种方式来看。
用外币花的钱怎么填?
先为每笔支出选择:是否已有按结算货币确定的账单金额。像信用卡账单那样已有确定金额的,就填那个金额,不会再按现在的汇率换算一次。还没有确定金额的,就选按汇率换算,填入付款币种的金额和汇率。只要有一笔支出用了汇率,结果上就会加上估算值标记。本计算器不查询汇率,所以汇率要你自己查好再填。
境外交易手续费填在哪里?
如果手续费已经含在账单金额里,就不要另外再填,否则会重复计算。只有与账单金额分开单独扣掉的手续费,才另加一行支出,并用权重定好由谁承担。本计算器不会在汇率之上再加手续费。
1 个最小货币单位总是多算在某一个人身上。
因为无法拆分到最小货币单位以下。先把各人的分摊额向下取整,剩下的零头再从被舍去小数部分最大的人开始,每次给 1 个。只有这样,分摊额之和才能与总额完全相等。若连小数部分都相同,就按参与者 ID 升序,也就是先添加的人先拿。
退款那一行的权重为什么改不了?
退款是把原支出退回去,所以分摊标准必须一致。改了权重就不是退回,而是一次新的分配,余额会被扭曲。因此退款行会直接沿用所选原支出的权重。性质不同的赔偿金或慰问金,不要当成退款,请作为单独的支出填入并另行商定。
我填的姓名和金额会留在什么地方吗?
不会。计算只在浏览器内完成,不会发送到服务器。分享链接里不带这些值,所以地址栏和浏览记录里也不会留下。代价是刷新后填写内容会消失,需要的话请用复制结果按钮。

本计算器不做的事

  • 不查询汇率。换算只用使用者自己填的汇率,只要还有费用没换算完,就不会生成转账方案。
  • 不会自动加上境外交易手续费或取现手续费。没有含在账单金额里的手续费,需要你自己另加一行支出填入。
  • 不执行银行转账,也不绑定账户,甚至不会要你填账号。
  • 填了日期也不会自动生成住宿的每一晚。每一晚的支出都要你自己添加。
  • 不猜测谁参与了哪笔支出,也不会把门票默认当成大家一起去。
  • 不推荐哪种分摊方式更公平。
  • 不保存你填的内容。刷新或关闭窗口后就会消失。

相关计算器

如果只是当场分掉一笔金额,下面的计算器更简单。

  • AA 制分账计算器 — 把一笔总额按人数平摊,或者直接写下每个人的金额,并立刻显示小费比例和人均金额。它不处理多笔支出、逐笔的分摊人,以及已经互相转过的钱。
  • 小费计算器 — 计算餐费要加的小费。把含小费在内的最终金额,作为本计算器的一笔支出填入即可。
  • 百分比计算器 — 在定权重之前,想先算清比例时用它。