新型コロナの影響もだいぶ落ち着いてきて「友人と食事に行ってきた」という話を聞く機会も増えてきました。すると、「割り勘」で支払いをする機会も増えるものです。日本では日常的な割り勘での支払いですが世界的には珍しいそうです。今回は、そんな日本の文化でもある「割り勘」が簡単に計算できる電卓を作ってみましょう。

  • 割り勘電卓作ってみよう

    割り勘電卓作ってみよう

「割り勘」と一言で言っても簡単ではない

「割り勘」とは食事会などの支払いを人数分で割って支払うことです。既に紹介したとおり、世界的に見ると、割り勘で支払うことは少ないのです。逆に中国や韓国では割り勘を申し出るのは失礼に当たることもあるようです。

支払い金額を人数で割るだけなので簡単なように見えますが、状況によって次のような条件で割り勘にする場合もあります。

  • 会社の食事会など、会社が一定金額を出してくれるので、残りを割り勘にする
  • 学生と社会人の勉強会などでは、学生は社会人の半額にする
  • 女性の参加費は固定費にして残りを男性で割り勘にする

加えて、どうしても端数が出ます。最近では電子マネーを使って1円単位での受け渡しも容易になりました。しかし、中には電子マネーを使っていない人もいるので、現金で支払うこともあるでしょう。その場合、1円単位で払うのは大変なので、10円単位や100円単位で端数処理をする必要もあります。この端数を幹事が払うのか、幹事が損をしないように端数分をのせて払うのかを選ぶ必要があります。

こうして考察すると、割り勘も簡単ではないですよね。あらゆる条件を作っていると、プログラムが長くなってしまうので、今回は次の条件の割り勘電卓を作ってみましょう。

  • 会社の食事会を想定する
  • 会社が一定額を支給してくれる
  • 100円単位で端数を丸める
  • 幹事は平社員が行うので幹事が損をしないようにする

簡単に計算するプログラムを作ろう

まずは、計算画面などを作らず、割り勘計算をするだけのプログラムを作ってみましょう。なでしこ簡易エディタに以下を貼り付けてみてください。

# === 以下を書き換えます ===
支払総額=18300
援助額=5000
参加人数=4
丸め金額=100
# === 以下は計算処理 ===
対象金額=支払総額 - 援助額
割り勘額=INT((対象金額÷参加人数)÷丸め金額+1)×丸め金額 # --- (*1)
# 結果
集金総額=割り勘額×参加人数
余剰額=集金総額+援助額−支払総額
「集金総額={集金総額}」を表示。
「一人支払い={割り勘額}」を表示。
「幹事支払い={割り勘額-余剰額}」を表示。

エディタにプログラムを貼り付けて「実行」ボタンを押すと、次のように表示されます。プログラム冒頭にある変数「支払総額」や「援助額」「参加人数」の値を変更して使います。

  • プログラムを実行して、支払額を表示したところ

    プログラムを実行して、支払額を表示したところ

プログラムを確認してみましょう。と言っても、考慮すべき点は割り勘金額を計算する(*1)の部分です。基本的に割り勘は、対象金額を参加人数で割るだけですが、丸め金額を利用して、丸め処理を行います。

INT関数は引数を受け取り、小数点以下を切り捨てて整数に変換するものです。そのため「INT(値÷丸め金額)×丸め金額」と書くことで端数単位での切り捨てが可能です。ここでは切上をしたいので、「INT(値÷丸め金額+1)×丸め金額」と+1を加えます。ちなみに、なでしこには「切上」命令があるので、+1と書かずに「(切上(値÷丸め金額))×丸め金額」のように記述することもできるでしょう。

入力画面を作ってみよう

次にプログラムを書き換えることなく、割り勘の計算が使えるように、入力画面を作ってみましょう。以下のプログラムをなでしこ3簡易エディタにはりつけて実行してみましょう。

# === 入力画面を作成 === --- (*1)
DOM部品オプション["自動改行"] = オン。
「支払総額」のラベル作成。
支払総額エディタ=「18300」のエディタ作成。
「援助額」のラベル作成。
援助額エディタ=「5000」のエディタ作成。
「参加人数」のラベル作成。
参加人数エディタ=「4」のエディタ作成。
計算ボタン=「計算」のボタン作成。
計算結果ラベル=「---」のラベル作成。
# === 計算処理 === --- (*2)
計算ボタンをクリックした時には
  # エディタの値を取得 --- (*3)
  支払総額=((支払総額エディタからテキスト取得)を整数変換)
  援助額=((援助額エディタからテキスト取得)を整数変換)
  参加人数=((参加人数エディタからテキスト取得)を整数変換)
  # 計算処理 --- (*4)
  丸め金額=100
  対象金額=支払総額 - 援助額
  割り勘額=INT((対象金額÷参加人数)÷丸め金額+1)×丸め金額
  集金総額=割り勘額×参加人数
  余剰額=集金総額+援助額−支払総額
  # 結果を出力 --- (*5)
  結果=「集金総額={集金総額}円<br><br>一人支払い={割り勘額}円<br>幹事支払い={割り勘額-余剰額}円」
  計算結果ラベルに結果をHTML設定。
ここまで。

エディタに貼り付けたら「実行」ボタンを押して動作を確認してみましょう。エディタに値を入力して「計算」ボタンを押すと、計算結果が表示されます。

  • 入力画面のある割り勘プログラムを実行したところ

    入力画面のある割り勘プログラムを実行したところ

プログラムを確認してみましょう。(*1)では入力画面を作成します。「ラベル作成」や「エディタ作成」命令を使う事で、画面上にラベルや入力エディタを作成できます。

(*2)では計算ボタンを押した時の処理を記述します。「計算ボタンをクリックした時には・・・ここまで」のように記述して、ボタンを押した時の処理を指定できます。

(*3)ではエディタに入力されている値を取り出して整数に変換します。そして、(*4)では値を元にして割り勘計算を行います。

最後の(*5)では計算結果を指定して、ラベル部品に計算結果を設定します。ここでは「HTML設定」命令を使っているので、テキストだけでなくHTMLタグが指定できます。

まとめ

以上、今回は割り勘電卓を作ってみました。本文でも紹介した通り、一口に割り勘と言ってもいろいろな割り勘の計算方法があります。また、場の空気にあった計算手法を選ばないと文句が出ることがあるというのも面白いところです。楽しい食事会で終わるように、うまく割り勘電卓を利用したいものです。それでは、皆さんもいろいろな割り勘電卓を作ってみてください。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。