この計算機でできること
お釣り計算機は、現金取引でお客様に渡すべきお釣りの金額を算出し、その金額を実用的な最小枚数の紙幣・硬貨に分解するツールです。特定の国や地域に縛られない汎用ツールで、世界の主要通貨から選べます。対応通貨は、米ドル(USD・初期設定)、ユーロ(EUR)、英ポンド(GBP)、カナダドル(CAD)、豪ドル(AUD)、メキシコペソ(MXN)、フィリピンペソ(PHP)、ニュージーランドドル(NZD)、ブラジルレアル(BRL)です。なお、日本円(JPY)には対応していませんが、計算ロジックはどの通貨でも共通です。
使い方
まず通貨とモードを選びます。「お釣りを計算」モードでは、購入金額と受け取った金額(預かり金)を入力すると、預かり金から購入金額を差し引いてお釣りを算出します。「お釣り金額を直接入力」モードでは、お釣りの金額を直接指定し、購入金額の計算は省略します。結果には、お釣りの金額に加えて、どの紙幣・硬貨を何枚渡せばよいかを大きい額面から順に並べた一覧と、合計枚数が表示されます。
計算式とアルゴリズム
はじめにお釣りを求めます。お釣り
$$C = \text{Tendered} - \text{Purchase}$$(または直接入力した金額)です。浮動小数点の誤差を防ぐため、金額に100を掛けて四捨五入し、補助単位(セント)の整数値に変換します。次に貪欲法(グリーディーアルゴリズム)が、額面の大きいものから小さいものへ順に処理し、各額面について
$$n_d = \left\lfloor \frac{r}{d} \right\rfloor,\quad r \leftarrow r - n_d\,d$$枚を取り、残額から差し引いていきます。USD・EUR・GBPのような標準的(カノニカル)な硬貨体系では、貪欲法で真の最小枚数が得られます。
計算例
USDで購入金額7.50ドル、預かり金20.00ドルの場合。お釣り
$$\text{Change} = 20.00 - 7.50 = 12.50\ \text{ドル} = 1250\ \text{セント}$$貪欲法で計算すると、10ドル札を1枚(残り250セント)、2ドル札を1枚(残り50セント)、50セント硬貨を1枚(残り0)。結果は、10ドル×1、2ドル×1、50セント×1の合計3枚となります。
よくある質問
なぜセント単位に変換するのですか? 補助単位の整数で計算することで、12.499999のような誤差から余計な1セントが生じるのを防げます。
特定の額面を無効にするとどうなりますか? 貪欲法は残った額面だけで計算を続けます。0まで到達できない場合は、残額をそのまま表示します。ぴったりのお釣りを保証するには、最小額の硬貨を有効にしておいてください。
貪欲法は常に最適ですか? 各国の標準的な硬貨体系であれば最適です。特殊な額面構成や、一部の額面を無効にした場合は、有効ではあるものの必ずしも全体として最小とは限らない結果を返します。