모임 정산 계산기
여러 항목을 누가 결제했고 누가 함께했는지 체크하면 사람별 부담액과 받을 돈, 보낼 돈, 송금 목록을 계산합니다. 중간에 합류했거나 일찍 떠난 사람, 먹지 않은 항목은 체크를 빼서 처리합니다. 계산은 모두 이 페이지 안에서만 이루어집니다.
계산기
1. 참가자 (2명 이상 30명 이하)
실명 대신 별명을 써도 됩니다. 이름은 서로 달라야 합니다.
2. 정산 항목
항목마다 금액, 결제한 사람, 함께한 사람을 고릅니다. 함께하지 않은 사람은 체크를 뺍니다.
3. 반올림 단위
단위로 떨어지지 않는 끝전은 해당 항목의 결제자가 부담합니다.
4. 계산 결과
사용법
먼저 참가자 이름을 적습니다. 홈 화면 설정에서 명단을 등록해 두었다면 저장된 명단 불러오기 버튼으로 한 번에 채울 수 있고, 불러오면 지금 입력한 참가자는 명단으로 바뀝니다. 다음으로 정산 항목을 추가합니다. 항목마다 이름(예: 식사, 카페), 금액, 결제한 사람을 고르고, 그 항목을 함께 나눌 사람에 체크합니다. 처음에는 모든 사람이 체크되어 있으므로 빠진 사람만 해제하면 됩니다.
금액은 쉼표 없이 숫자만 적어도 되고 쉼표가 있어도 됩니다. 소수점이나 음수는 받지 않으며 1원 이상의 정수만 계산합니다. 모든 입력이 올바르면 아래쪽 결과에 사람별 낸 돈, 부담액, 순액이 표로 나오고 이어서 송금 목록이 나옵니다. 입력에 문제가 있으면 어느 항목이 왜 계산되지 않는지 결과 자리에 문구로 표시됩니다. 단톡방용 텍스트 복사 버튼은 항목, 사람별 부담액, 송금 목록을 한 덩어리 글로 복사하며, 브라우저가 복사를 막으면 글상자에 같은 텍스트를 띄워 직접 선택해 복사할 수 있게 합니다.
계산 규칙
금액은 정수 원으로만 계산하므로 소수점 오차가 생기지 않습니다. 항목 하나를 나누는 순서는 다음과 같습니다.
- 참여자의 몫을 고른 단위(1원, 10원, 100원) 기준으로 내림해서 똑같이 나눕니다.
- 내림 때문에 남은 단위 몫은 참가자 명단의 순서대로 앞사람부터 한 단위씩 더 나눠 갖습니다. 이렇게 하면 참여자끼리 몫의 차이는 많아야 한 단위입니다.
- 단위에 미치지 못하고 남는 끝전은 그 항목의 결제자가 부담합니다.
- 결제자가 참여자에 포함되어 있으면 결제자는 자기 몫만큼은 받을 돈에서 빼므로, 자기 자신에게 돈을 보내는 일은 없습니다.
- 참여자가 한 명도 체크되지 않은 항목은 오류로 표시하며, 그 상태로는 계산하지 않습니다.
예를 들어 10,000원을 세 명이 1원 단위로 나누면 한 사람당 3,333원이고 1원이 남으므로 명단 순서의 첫 사람이 3,334원, 나머지 두 사람이 3,333원을 부담합니다. 같은 금액을 100원 단위로 나누면 100원 묶음이 100개이므로 한 사람당 33묶음에 1묶음이 남아 3,400원, 3,300원, 3,300원이 됩니다. 이때는 합이 정확히 10,000원이라서 끝전이 없습니다. 반대로 10,005원을 10원 단위로 나누는 항목이라면 5원이 단위에 못 미치는 끝전이므로 결제자가 5원을 더 부담합니다.
순액은 낸 돈에서 부담액을 뺀 값입니다. 양수면 받을 돈, 음수면 보낼 돈이며, 모든 사람의 순액을 더하면 항상 0원입니다. 사람별 부담액을 모두 더하면 항목 금액의 합과 같습니다. 이 두 가지는 자동 테스트가 무작위 입력 수백 개로 확인하는 항목입니다.
송금 횟수의 원리와 한계
송금 목록은 가장 많이 받을 사람과 가장 많이 보낼 사람을 차례로 맞추는 방식으로 만듭니다. 두 사람 중 작은 쪽 금액만큼 한 번 송금하면 적어도 한 사람은 정산이 끝나고, 마지막 송금에서는 두 사람이 한꺼번에 끝납니다. 그래서 송금은 아무리 많아도 참가자 수보다 한 번 적은 n−1번을 넘지 않습니다. 열 명이 한 번씩 서로 보내던 것을 이 방식으로 정리하면 최대 9번으로 줄어듭니다.
다만 이것이 진짜 최소 횟수라는 뜻은 아닙니다. 보낼 돈과 받을 돈의 금액이 우연히 짝지어 떨어지는 경우에는 이 방식보다 적은 횟수로 끝내는 조합이 있을 수 있고, 그런 최소 조합을 찾는 일은 사람이 많아질수록 계산이 어려워지는 문제로 알려져 있습니다. 이 도구는 정직하게 말해 최소가 아니라 최대 n−1번을 보장하는 방식을 택했습니다. 같은 입력이면 항상 같은 송금 목록이 나오도록 동률일 때는 명단 앞쪽 사람을 먼저 고릅니다.
자주 생기는 정산 상황
중간에 합류한 사람
1차에는 없었고 2차부터 온 사람은 1차 항목에서 체크를 빼고 2차 이후 항목에만 체크합니다. 같은 참가자 명단 하나로 항목별 참여자만 달리하면 되므로 따로 계산할 필요가 없습니다.
일찍 간 사람
먼저 자리를 뜬 사람은 떠난 뒤에 생긴 항목의 체크를 뺍니다. 이미 함께 먹은 항목은 그대로 체크해 두면 그만큼의 부담액이 남습니다. 떠나기 전에 먼저 송금했다면 그 금액은 별도 항목으로 넣지 않고, 최종 송금 목록에서 보낸 금액을 빼고 확인하세요.
먹지 않은 사람 제외
특정 메뉴를 먹지 않았거나 이용하지 않은 사람은 그 항목에서만 체크를 뺍니다. 한 항목을 여러 메뉴로 나누고 싶다면 메뉴별로 항목을 따로 만들어 각각 참여자를 고르면 됩니다.
총무가 먼저 결제한 경우
총무 한 명이 여러 항목을 대신 결제했다면 모든 항목의 결제자를 총무로 고릅니다. 그러면 총무의 순액은 받을 돈이 되고 나머지 사람은 총무에게 보내는 송금 목록이 나옵니다. 여러 사람이 서로 다른 항목을 결제했을 때도 같은 방식으로 한 번에 정리됩니다.
개인정보 안내
이 페이지에 입력한 이름과 금액은 서버로 전송되지 않으며 주소(URL)에 담겨 공유되지도 않습니다. 계산은 브라우저 안에서만 이루어집니다. 다시 열었을 때 이어서 쓸 수 있도록 같은 기기의 브라우저 저장소(localStorage의 dgSettlement 항목)에만 저장하고, 저장이 막힌 브라우저에서도 계산은 정상적으로 됩니다. 공용 기기나 다른 사람이 쓰는 기기라면 사용 후 이 기기의 정산 기록 지우기 버튼을 눌러 주세요. 저장되는 정보와 보관 방식은 개인정보처리방침에서도 볼 수 있습니다.
주의
이 도구는 계산을 돕는 보조 수단이며 송금을 대신 해 주지 않습니다. 실제 송금 전에 항목 금액과 결제자, 참여자 체크가 영수증과 맞는지 한 번 더 확인하세요. 계산 결과에 대한 최종 판단과 송금은 참가자들이 합의해서 직접 진행해야 합니다.
정산 뒤에 이어서 쓸 만한 도구로는 순서와 일정을 짜는 모임 진행 키트, 인원을 나누는 팀 나누기, 확률을 따져 보는 공정한 추첨이 있습니다.