计算工具 · 比价 / AA

AA 算账

多人 AA/红包公平分账/微信群

✓本地处理 · 不上传 ✓免费 · 无需登录 ✓无次数限制 累计 126 次使用
消费总额¥300.00
元
参与人数3 人
服务费 / 抹零可选
全程以「分」为整数单位运算 · 合计精确无丢分 · 本地计算不上传
算法说明 / 公平性

平均 AA · 余数分配:人均 = ⌊总额(分) ÷ 人数⌋,除不尽的余数(几分钱)从前往后每人多担 1 分,保证每人差不超过 1 分、合计精确等于总额。避免 100 ÷ 3 = 33.33×3 = 99.99 的丢分。

明细分账 · 净额:每人净额 = 已垫付 − 应分摊;所有人净额之和恒为 0(以分为整数运算,无浮点误差)。净额为正 = 应收回(别人欠你),为负 = 应支付(你欠别人)。

债务最小化结算:把净额分为债权(正)与债务(负)两组,反复用「最大债权人」与「最大债务人」相互抵消并记一笔转账,直到全部清零——以接近最少的转账笔数结清,远胜「人人互转」。

红包公平随机:每份保证 > 0,且各份之和精确等于总额(最后一份 = 总额 − 前面之和);随机模式用「二倍均值法」让金额有起伏又不为 0,等额模式则余数逐分派发。

提示:本工具所有金额以「分」为最小单位整数运算,合计始终精确。结算清单可直接复制发到微信群,照单转账即可两清。

第一节

关于本工具

About

饭局尾声,群里有人转了 328 元,备注“多退少补”,剩下的人对着账单猜谁该补多少。这个工具把总金额、人数和每个人已付或垫付的数额填进去,直接给出每人应收或应付的净额,支持按人头平摊、按比例分摊和红包随机分账三种模式。所有计算都在浏览器内完成,输入数据不会离开设备。

使用场景

壹

毕业旅行红包雨

六人毕业旅行,最后一天结算时,小A垫付了全程住宿,小B付了所有门票,大家轮流请客吃饭。微信群里的红包发得乱七八糟,有人多抢了早餐钱,有人少付了景区观光车。用这个工具,把每一笔垫付的金额和对应的人名填进去,自动算出谁该给谁转多少钱,最后每人只发一个红包,清掉所有糊涂账,毕业不伤感情。

贰

合租室友水电分摊

三室合租,室友A出差半个月,室友B天天在家开空调,室友C养猫多用了两倍的电。月底水电费单子来了,按人头平摊显然不公平。把每个人的入住天数、大功率电器使用情况折算成系数填进工具,选加权分摊模式,工具自动算出每人该付的精确比例,不再因为几十块钱闹别扭。

叁

同事聚餐AA补差价

部门12人聚餐,结账时经理直接刷卡付了1280元。大家往群里发红包,有人发了100,有人发了80,有人只发了50。最后经理收了红包一算,总数差了210元,又不好意思挨个催。把每人实付金额和应付金额输进工具,工具自动列出谁欠谁多少,生成一个汇总表发群里,大家补上差额,经理不用当讨债人。

肆

情侣旅行记账对账

情侣出游一周,男生付了机票和酒店,女生付了餐饮和门票。回来后两人各自记账,男生记了8500,女生记了3200,但总觉得有一笔打车费重复算了。把各自记录的每笔金额、支付人和备注输入工具,工具自动合并去重,算出双方总支出差额,再按事先约定的分摊比例(比如男生60%女生40%)算出最终转账金额,省去翻聊天记录对账的麻烦。

伍

家族群红包接龙结算

春节家族群玩红包接龙,规则是抢到最少的人接着发。玩了十几轮,有人发了200,有人只发了20,还有人抢了就跑。群里吵成一团,谁也记不清谁欠谁。把每一轮的发包人和每个抢包人的金额录进工具,工具能按接龙规则自动核算出每个参与者最终的净支出或净收入,谁该补发多少钱一目了然,家族群恢复和谐。

对比矩阵

维度本工具微信自带群收款传统手工记账
隐私纯浏览器计算,数据不上传服务器需在微信内操作,数据经微信服务器完全本地,但需人工记录
离线可用页面加载后断网仍可计算需联网使用完全离线
算法灵活性支持 AA、红包随机、自定义权重等多种分账模式仅支持等额 AA,无随机或权重分账依赖人工计算,灵活但易出错
多人场景效率输入金额与人数,一键出结果需逐人设置金额或等额分摊,操作步骤多手动加总、除法、核对,耗时长
结果导出支持复制结果文本,可粘贴到微信结果仅限群内显示,无法单独导出需手写或手动录入电子表格
红包公平分账支持红包金额按规则公平分摊至个人不支持可手动计算但繁琐
平台依赖任何浏览器打开即可用,无需安装仅限微信 App 内使用纸笔或任意设备均可
第二节

使用指南

Getting Started

使用步骤

  1. 1在「总金额」输入框填入聚餐或红包总金额,右侧实时显示已填人数与待分摊余额
  2. 2在「人数」输入框填入参与分摊的总人数,下方列表自动生成对应数量的姓名占位行
  3. 3点击任意占位行右侧的「免单」或「固定金额」开关,可单独调整某人的分摊方式
  4. 4调整完毕后点击「生成账单」按钮,页面立即输出每人应付金额与红包领取明细

输入输出示例

输入输出说明
总金额 500 元,人数 5 人,模式:随机红包红包 1:98.23 元;红包 2:102.56 元;红包 3:95.47 元;红包 4:104.89 元;红包 5:98.85 元(合计 500.00 元)常规:验证随机红包金额之和等于总金额,且每人金额不同
总金额 100 元,人数 4 人,模式:AA 均分每人 25.00 元(合计 100.00 元)常规:AA 均分场景,验证整除时金额精确到分
总金额 10 元,人数 3 人,模式:AA 均分每人 3.33 元(合计 9.99 元,差额 0.01 元归最后一人)边界:金额无法整除,工具如何处理余数(通常归最后一人或随机分配)
总金额 0.01 元,人数 2 人,模式:随机红包红包 1:0.01 元;红包 2:0.00 元(合计 0.01 元)边界:最小金额场景,验证工具允许 0.00 元红包出现(符合微信红包规则)
总金额 200 元,人数 200 人,模式:随机红包红包 1:1.00 元;红包 2:1.00 元;……(共 200 个红包,合计 200.00 元,每人至少 0.01 元)边界:人数等于金额(元),验证每人至少 0.01 元且总额正确
总金额 100 元,人数 10 人,模式:AA 均分,但输入人数为 0错误提示:人数必须大于 0易错:人数为 0 时工具应给出明确错误,而非崩溃或返回空结果
总金额 -50 元,人数 5 人,模式:随机红包错误提示:总金额必须为正数易错:负数金额的校验,防止用户误输入
总金额 100 元,人数 3 人,模式:AA 均分,但输入人数为 3.5错误提示:人数必须为整数易错:非整数人数的处理,避免计算逻辑异常

常见错误对照

1.总金额与人数不匹配,红包算法出现零元或负数

✗ 错误总金额 10 元,分给 11 人,每人至少 0.01 元
✓ 修复总金额 10 元,分给 10 人,每人至少 0.01 元;或总金额 11 元,分给 11 人

微信红包算法要求每人至少 0.01 元,总金额必须 ≥ 人数 × 0.01,否则随机分配时会因金额不足报错或出现零元红包。

2.金额单位混淆,把分当元输入

✗ 错误总金额输入 1000(实际想表达 10 元,但单位是分)
✓ 修复总金额输入 10(单位明确为元)

工具默认金额单位为元,若按分输入会导致实际分账金额放大 100 倍,造成账目混乱。

3.人数输入为 0 或负数,导致计算无意义

✗ 错误人数输入 0 或 -3
✓ 修复人数输入 ≥ 2 的整数

AA 分账至少需要 2 人,0 或负数在数学上无意义,工具应做前端校验拦截。

4.红包模式选错,把「随机红包」当「普通 AA」用

✗ 错误希望每人金额相等,却选择了「随机红包」模式
✓ 修复选择「普通 AA」模式,或确认随机红包后再查看结果

随机红包模式每人金额不同,若期望均分则结果与预期不符,需在操作前明确模式语义。

5.小数点后位数超过 2 位,导致金额精度丢失

✗ 错误总金额 10.123 元,分给 3 人
✓ 修复总金额 10.12 元(保留两位小数)

人民币最小单位为分(0.01 元),超过两位小数的金额无法在真实转账中使用,工具应自动四舍五入到分。

6.把微信群昵称当作真实姓名,分账后对不上人

✗ 错误在工具里用「张三-财务」作为分账人,实际微信昵称是「张三」
✓ 修复使用微信昵称或真实姓名,确保与转账备注一致

分账结果最终需在微信群内对账,昵称不一致会导致收款人找不到对应记录。

第三节

工作原理

How It Works

核心公式

每人应付 = 总金额 ÷ 人数 + (红包金额 × 个人权重 ÷ 总权重)

变量说明

  • 总金额AA 总消费金额,单位元
  • 人数参与分账的总人数
  • 红包金额额外红包总金额,单位元
  • 个人权重每人红包分配权重,默认 1
  • 总权重所有个人权重之和

示例

4 人聚餐总消费 600 元,另发红包 40 元,权重均为 1(总权重 4)。每人应付 = 600÷4 + (40×1÷4) = 150 + 10 = 160 元。若其中一人权重为 2(总权重 5),则该人应付 = 150 + (40×2÷5) = 150 + 16 = 166 元,其余三人各付 = 150 + (40×1÷5) = 150 + 8 = 158 元。

输入账单金额 / 支付人 / 参与人校验与拆分人数 / 金额合法性分摊计算AA / 红包 / 自定义结果应收 / 应付红包规则随机 / 拼手气 / 普通红包分配金额随机拆分结果每人金额
用户输入 / 规则选择 本地处理(浏览器内) 输出结果
第四节

开发者集成

For Developers

6 种主流语言实现,复制即用:

from decimal import Decimal, ROUND_HALF_UP # 多人 AA 分账:总金额按人数均分,处理分币尾差 def split_bill(total: str, n: int) -> list[str]: total_cents = int(Decimal(total) * 100) base = total_cents // n remainder = total_cents % n # 前 remainder 人每人多 1 分 amounts = [base + (1 if i < remainder else 0) for i in range(n)] # 转换为元,保留两位小数 return [f"{Decimal(a) / 100:.2f}" for a in amounts] # 示例:3 人分 100.01 元 print(split_bill("100.01", 3)) # ['33.34', '33.34', '33.33']
// 多人 AA 分账:总金额按人数均分,分币尾差归前几人 function splitBill(total, n) { const totalCents = Math.round(parseFloat(total) * 100); const base = Math.floor(totalCents / n); const remainder = totalCents % n; return Array.from({ length: n }, (_, i) => ((base + (i < remainder ? 1 : 0)) / 100).toFixed(2) ); } // 示例:4 人分 50.03 元 console.log(splitBill("50.03", 4)); // ['12.51', '12.51', '12.51', '12.50']
package main import ( "fmt" "math" "strconv" ) // 多人 AA 分账:总金额按人数均分,分币尾差归前几人 func splitBill(total string, n int) []string { f, _ := strconv.ParseFloat(total, 64) totalCents := int(math.Round(f * 100)) base := totalCents / n remainder := totalCents % n res := make([]string, n) for i := 0; i < n; i++ { amt := base if i < remainder { amt++ } res[i] = fmt.Sprintf("%.2f", float64(amt)/100) } return res } func main() { fmt.Println(splitBill("100.01", 3)) // [33.34 33.34 33.33] }
#!/bin/bash # 多人 AA 分账:总金额按人数均分,分币尾差归前几人 split_bill() { local total="$1" local n="$2" # 转换为分 local total_cents=$(echo "$total * 100" | bc | sed 's/\..*//') local base=$((total_cents / n)) local remainder=$((total_cents % n)) for ((i=0; i<n; i++)); do local amt=$base if (( i < remainder )); then amt=$((amt + 1)) fi printf "%.2f\n" $(echo "scale=2; $amt / 100" | bc) done } # 示例:3 人分 100.01 元 split_bill "100.01" 3 # 33.34 33.34 33.33
import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; public class AASplit { public static List<String> splitBill(String total, int n) { BigDecimal totalBD = new BigDecimal(total); int totalCents = totalBD.multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP).intValue(); int base = totalCents / n; int remainder = totalCents % n; List<String> result = new ArrayList<>(); for (int i = 0; i < n; i++) { int amt = base + (i < remainder ? 1 : 0); result.add(BigDecimal.valueOf(amt).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP).toString()); } return result; } public static void main(String[] args) { System.out.println(splitBill("100.01", 3)); // [33.34, 33.34, 33.33] } }
fn split_bill(total: &str, n: usize) -> Vec<String> { let total_cents: i64 = (total.parse::<f64>().unwrap() * 100.0).round() as i64; let base = total_cents / n as i64; let remainder = total_cents % n as i64; (0..n) .map(|i| { let amt = base + if i < remainder as usize { 1 } else { 0 }; format!("{:.2}", amt as f64 / 100.0) }) .collect() } fn main() { println!("{:?}", split_bill("100.01", 3)); // ["33.34", "33.34", "33.33"] }
第五节

常见问题

Q & A
问AA 算账支持发红包那种随机金额吗?还是只能固定每人一样?+
答

支持。输入总金额和人数后,勾选「随机分配(红包模式)」,系统会按微信红包的逻辑生成随机金额,每人分到的钱不等但总和等于总金额。适合群里抢红包后记账、拼手气红包返现等场景。不勾选则默认均分,每人金额相同。

问我群里有人付了钱但没参与消费,怎么处理?比如 A 垫付了 100,只有 BCD 三个人吃,A 不出钱。+
答

在「参与人数」里把 A 排除掉。输入总金额 100 元,参与人数选 3(B、C、D),然后勾选「指定垫付人」并填入 A 垫付 100 元。结果会显示 B、C、D 每人应付 33.33 元给 A,A 自己不用出钱。这个逻辑在聚餐、团建代买场景很常用。

问为什么我算出来的每人金额加起来和总金额差几分钱?+
答

这是金额四舍五入到两位小数造成的「分差」。比如 100 元分 3 人,每人 33.33,3×33.33=99.99,少了 1 分。本工具在结果区会标注「合计:100.00 元(已自动补差)」,差额会自动加到最后一个人头上,保证总和精确等于总金额。如果看到某个人金额多了一分,就是补差结果,不是算错。

问微信群里好几个人都垫付了,比如 A 买了菜 B 买了肉 C 买了酒,怎么算每个人该给谁多少钱?+
答

本工具支持「多垫付人」模式。在总金额处填所有开销的合计(比如菜+肉+酒=300 元),然后在垫付明细里分别录入:A 垫付 100、B 垫付 80、C 垫付 120。系统会自动算出每个人最终应付/应收的净额,并生成一张「谁该转给谁多少钱」的清单,省去手动交叉抵消的麻烦。

问算出来的结果能直接复制发到微信群吗?怎么操作?+
答

可以。结果区下方有「复制结果」按钮,点击后会把每人应付金额整理成一段文本,格式像「张三 → 李四 33.33 元 / 王五 → 李四 25.00 元」,直接粘贴到微信群就能发。如果金额是随机分配的,还会附上每个人的具体金额。不需要截图,也不用手打。

问这个工具是纯网页算的,还是会把数据上传到服务器?+
答

纯浏览器端计算,数据不上传任何服务器。所有金额、人数、垫付信息都在本地 JavaScript 里处理,关闭页面后数据自动消失。不需要注册登录,也没有网络请求。如果担心隐私,可以断网使用,计算结果不受影响。

问我算的是外币,比如几个人去日本旅游平摊餐费,支持日元吗?+
答

金额输入框只接受数字和小数点,不限制货币单位。你可以在总金额里直接输入「15000」(日元),结果会显示每人应付 5000(日元)。货币符号需要自己在复制结果时手动加上,工具本身不做汇率换算。适合任何货币的平摊场景,只要大家约定好统一用同一种货币计价。

问最多支持多少人一起算?超过 100 人会不会卡?+
答

没有硬性人数上限,但超过 100 人时浏览器渲染结果列表可能略有延迟。实测在普通手机上 200 人以内点击计算后 1 秒内出结果。如果人数超过 500,建议分批次算,或者用电脑端浏览器操作。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

↑↓选择 ↵打开 ⌘+↵新窗口 esc关闭