共同支出を不均等な割合で分担する計算ツール
均等割りは簡単ですが、常に公平とは限りません。ルームメイトの部屋の広さ、旅行者の宿泊日数、世帯員の収入に応じて負担を変える場合があります。この計算ツールは、各人に設定した重みに比例して一つの共同支出を配分します。合計額、氏名、相対的な重みを入力すると、一貫した丸め処理で各人の負担額を算出します。重みには合意した任意の基準を使用でき、最終的な配分額の和は丸め後の合計額と必ず一致します。
無料で実行
合意内容を表す重みを設定してください
重みは相対的な取り分であり、必ずしも百分率や金額ではありません。3 人の重みが 1、2、3 なら、負担は合計の 6 分の 1、6 分の 2、6 分の 3 です。すべての重みに同じ数を掛けても結果は変わらないため、10、20、30 でも同じ配分になります。この仕組みにより、部屋の広さに応じた家賃、居住人数に応じた光熱費、宿泊日数に応じた団体予約費、収入に応じた家計費などを計算できます。計算前に重みの意味を合意し、全員に同じ基準を適用してください。特定の支出を意図的に免除する人には重み 0 を設定できます。ただし、全体では少なくとも一つの正の重みが必要です。すべてが 0 の場合は比例配分の数学的根拠がないため、均等割りを勝手に行わず入力エラーを返します。結果をメッセージや帳簿へ転記しても明確に識別できるよう、氏名は重複できません。
丸め処理と正確な合計をご確認ください
比例配分では、実際に支払える最小通貨単位より小さい端数が生じることがあります。たとえば、小額の請求を 3 つの重み付き負担に分けると循環小数になる場合があります。本ツールは、まず入力合計を選択した小数精度へ変換し、各人の正確な比例額を計算してから、最大剰余方式で残った最小単位を割り当てます。丸め前の端数が大きい人から順に単位を受け取ります。端数が等しい場合は入力順で決めるため、何度実行しても決定的な結果になります。表示された負担額の和は表示合計と必ず一致し、1 円や 1 セントが消えたり増えたりしません。ドルやユーロでは通常 2 桁、整数単位なら 0 桁、共有する数量が対応する場合はより高い精度をご指定ください。`share` は数学的比率、`owed` は丸め後の支払額です。合計自体も指定精度へ丸められるため、精算方法が扱う精度で入力してください。
結果を確認して共有してください
この計算はグループの合意を透明に実行するものであり、合意そのものを決めるものではありません。請求前に、合計額、重みの総和、各人の重みをご確認ください。2 の代わりに 20 と入力する誤りも数学的には有効ですが、配分を大幅に変えます。応答には各氏名とともに正規化された比率と負担額が示されるため、算出根拠を簡単に説明できます。会計上重要な配分では、負担額だけでは分からない背景を残すため、元の入力と結果を一緒に保存してください。定期的な支出では重み付け規則を安定させ、事情が変わった際は全員に明示して更新することをお勧めします。ブラウザー版は家賃、会食、旅行、光熱費などの単発計算に便利です。API では、不動産管理、旅行手配、表計算連携、社内財務ツールに同じ決定的な規則を 1 リクエスト $0.002 で組み込めます。為替照会や送金は行わず、すべて同一単位として配分のみを返します。
活用例
部屋の広さに応じて家賃を配分
相対的な床面積や合意した評価値を用いて、ルームメイト間で家賃を分担できます。
宿泊日数に応じて旅行費を分担
各旅行者の参加泊数を重みにして、短期滞在者の負担を少なくできます。
収入に応じて家計費を配分
合意した収入比率を用い、共通請求を透明な計算で分担できます。
よくある質問
重みの合計は 100 にする必要がありますか?
いいえ。重みは相対値なので、合計は任意の正の数で構いません。
すべての重みが 0 の場合はどうなりますか?
重みの総和が 0 では比例配分できないため、入力エラーを返します。
一人だけ重みを 0 にできますか?
はい。ほかに少なくとも一人の正の重みがあれば、その人の負担額は 0 になります。
負担額の和は合計と正確に一致しますか?
はい。最大剰余方式で丸め単位を配り、指定精度で配分額の和を合計に一致させます。
API の料金はいくらですか?
API は 1 リクエスト $0.002 です。このページの計算ツールはローカルで無料実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/calc3/split-expenses-unequal-shares \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total":120,"people":[{"name":"Alex","weight":1},{"name":"Blair","weight":2},{"name":"Casey","weight":3}]}'const res = await fetch("https://api.kit.forhosting.com/calc3/split-expenses-unequal-shares", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total": 120,
"people": [
{
"name": "Alex",
"weight": 1
},
{
"name": "Blair",
"weight": 2
},
{
"name": "Casey",
"weight": 3
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/calc3/split-expenses-unequal-shares",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total": 120,
"people": [
{
"name": "Alex",
"weight": 1
},
{
"name": "Blair",
"weight": 2
},
{
"name": "Casey",
"weight": 3
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/calc3/split-expenses-unequal-shares", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total":120,"people":[{"name":"Alex","weight":1},{"name":"Blair","weight":2},{"name":"Casey","weight":3}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total":120,"people":[{"name":"Alex","weight":1},{"name":"Blair","weight":2},{"name":"Casey","weight":3}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/calc3/split-expenses-unequal-shares", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"total": 120,
"people": [
{
"name": "Alex",
"weight": 1
},
{
"name": "Blair",
"weight": 2
},
{
"name": "Casey",
"weight": 3
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "calc3.split_expenses_unequal_shares",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |