現金を紙幣・硬貨に分ける計算
この現金内訳計算ツールは、指定された紙幣や硬貨だけを使い、合計金額を正確に作る方法を求めます。特定の国の通貨体系を前提にせず、一般的な大きい額面優先の近似にも頼らず、物理的な枚数を最小化します。金額と使用可能な額面を入力してください。小数の硬貨にも対応します。結果には各額面の必要枚数と合計枚数が表示され、指定した額面で正確に作れない金額は明確なエラーになります。
無料で実行
金額と使用できる額面を入力します
まず用意したい現金の合計額を入力し、次に使用可能な紙幣と硬貨の額面を指定します。この計算ツールは通貨に依存しません。20、10、5、1、0.25、0.10 のような値は十進通貨に利用でき、別の組み合わせなら商品券、イベント用トークン、または一部の額面が不足しているレジも表現できます。金額と額面には小数第2位まで指定できます。最小通貨単位の整数に直して計算するため、浮動小数点の誤差を避けて正確に処理できます。各額面は正の値で、重複してはいけません。出力では額面を大きい順に並べ、不要な額面も0枚としてすべて表示します。そのため、レジ管理表、封入リスト、引き出し計画、照合記録へ簡単に転記できます。なお、指定した各額面は無制限に用意できるものとして扱います。入力リストは利用できる額面の種類を示すものであり、現在保有している実際の枚数を示すものではありません。
本当に最少枚数になる理由
日常的な通貨では、残額を超えない最大の額面を順番に選ぶだけでよいように見えます。この貪欲法は高速ですが、すべての額面構成で最適になるわけではありません。特殊なトークン、催事用クーポン、外国硬貨、または一般的な額面が不足したレジでは、小さい額面を先に使う組み合わせのほうが少ない枚数になる場合があります。このツールは動的計画法を使用します。到達可能な小計を調べ、それぞれを作るための最少枚数を記録してから、指定された合計額の正確な組み合わせを復元します。計算前にすべての値を最小通貨単位の整数へ変換するため、小数第2位までの入力を正確に比較できます。同じ最少枚数の組み合わせが複数ある場合は、決定的な探索順序により大きい額面を優先します。そのため、同じ入力からは常に同じ内訳が得られます。ブラウザーと API の応答性を守るため計算量には上限があります。非常に小さい額面と大きな合計額を組み合わせて公開済みの正規化処理上限を超えた場合は、際限なく実行せずエラーとして返します。
正確に作れない場合を理解し、安全に結果を使います
正確な組み合わせが常に存在するとは限りません。たとえば、使用できる額面がすべて5セントの倍数なら、末尾が3セントの金額は何枚使っても作れません。この場合、近い金額を返したり、合計を黙って丸めたり、存在しない額面を追加したりせず、入力エラーとして通知します。わずかな不足や超過も誤りとなるレジ照合、釣り銭パック、管理された現金支払いでは、この区別が重要です。成功時には、正規化された金額、最少の合計枚数、額面別の内訳が返されます。0枚の項目も残るため、入力した額面の全体を表し、在庫表の行と合わせられます。実際に準備する前に、アルゴリズムが各額面を無制限に使えるものとしている点をご確認ください。レジ内の枚数に限りがある場合は、提案された枚数と実在庫を照合する必要があります。この機能は、在庫上限を考慮する別の問題には対応していません。同じ決定的な計算をブラウザーで利用でき、API は1回 $0.002 です。
活用例
現金支払い用の封筒を準備
承認された額面だけを使い、各支払額を最少枚数で封入するための明細を作成します。
レジ補充の内訳を計画
使用する紙幣と硬貨が限られている場合に、目標金額をコンパクトに構成します。
商品券やイベント用トークンを配布
特殊な額面の組み合わせを使い、手持ちのトークンでは正確に表せない金額を判定します。
よくある質問
紙幣と硬貨の枚数は必ず最少になりますか?
はい。動的計画法で到達可能な小計を調べ、合計枚数が最少となる正確な組み合わせを返します。
小数の硬貨額面を使用できますか?
はい。金額と額面には、0.25 や 0.05 のように小数第2位まで指定できます。
金額を正確に作れない場合はどうなりますか?
指定した額面では正確な金額を作れないことを示す入力エラーを返します。近い合計額への丸めは行いません。
レジ内の限られた在庫枚数も考慮しますか?
いいえ。リストにある各額面は無制限に使えるものとして扱います。実在庫の枚数はこの機能の対象外です。
最大額面から選ぶ方法と答えが違うのはなぜですか?
独自の額面構成では貪欲法が最適にならない場合があります。このツールは組み合わせを検証し、最少枚数を保証します。
API の利用料金はいくらですか?
API は1リクエストあたり $0.002 です。同じ決定的な計算ツールをブラウザーでは無料で利用できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/travel2/currency-cash-denomination-split \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":18.85,"denominations":[10,5,2,1,0.25,0.1,0.05]}'const res = await fetch("https://api.kit.forhosting.com/travel2/currency-cash-denomination-split", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"amount": 18.85,
"denominations": [
10,
5,
2,
1,
0.25,
0.1,
0.05
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel2/currency-cash-denomination-split",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"amount": 18.85,
"denominations": [
10,
5,
2,
1,
0.25,
0.1,
0.05
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel2/currency-cash-denomination-split", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"amount":18.85,"denominations":[10,5,2,1,0.25,0.1,0.05]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"amount":18.85,"denominations":[10,5,2,1,0.25,0.1,0.05]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel2/currency-cash-denomination-split", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"amount": 18.85,
"denominations": [
10,
5,
2,
1,
0.25,
0.1,
0.05
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel2.currency_cash_denomination_split",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_denominations | 100 |
max_normalized_amount | 250000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |