麦麦拼单官 · 在线分账试算器 mcd-group-order · Largest Remainder Method

全程以「分」为单位的整数运算 —— 明细合计 恒等于 订单实付,永不出 0.01 尾差。

🍔 谁点了什么 0 项

从 JSON 导入(与 split_bill.py 输入格式一致)

💰 优惠与费用

拼单群里最容易吵架的就是「优惠怎么分」。这里把它显式化成口径选项,而不是争议点。

📊 分账结果

🧾 每人应付

💸 转账方案 星型拓扑 · 笔数最少

⚖️ 三种口径对比

同一张单,换口径各人应付差多少?

✓ 表示该人在此口径下最省。三种口径的合计永远相同 —— 换的只是「怎么分」。

📋 一键贴群

生成的分账单可直接粘贴到群里,格式与 split_bill.py --markdown 一致。

为什么不能直接用浮点数算?

3 个人均摊 ¥10.00,每人 3.333… 元。四舍五入到分,三个人加起来只有 ¥9.99 —— 少了 1 分。这 1 分总得有人出,于是群里开始扯皮。

✗ 朴素四舍五入

3.33 + 3.33 + 3.33
= 9.99 ≠ 10.00
凭空少了 0.01

✓ 最大余额法

3.34 + 3.33 + 3.33
= 10.00 = 10.00
合计精确恒等

最大余额法(Largest Remainder Method)

  • 先按权重算出每人应得的「理论值」,向下取整得到基础分摊额;
  • 把取整丢掉的余数,按小数部分从大到小逐一补回去;
  • 数学保证 Σ(每人应付) ≡ 订单实付,一分不差。

优惠分摊为什么要带上限?

如果一张券的面额超过了某人的商品原价,按比例分给他会出现负数应付。这里用「注水法」:谁先触顶就把他的额度锁死,剩余优惠由其余人继续按比例分,直到分完。

口径说明

  • proportional —— 按商品原价比例分摊。买得多省得多,最公平,默认。
  • equal —— 按人头均摊。最省事,适合大家点得差不多的情况。
  • owner —— 谁触发/持有该券谁独享优惠。券是人家的,人情归人家。

这个页面是真的在算,不是摆设

本页算法与仓库里 skills/mcd-group-order/scripts/split_bill.py 的 allocate() / allocate_capped() 逐行对齐,纯前端确定性整数运算,无后端、无网络请求、不上传任何数据。所有金额只在你的浏览器里算。