割り勘でもめるのは、たいてい金額そのものではありません。 「これは半分でいいの?」と、割り切れなかった1円を誰が持つのかです。 前者は話し合えば決まりますが、後者は誰も口に出さないまま、静かに片方へ積もっていきます。
割り勘アプリを作っていて、この1円の扱いを二度作り直しました。 最初の設計は直感的で、実装も短く、そして半分ずつのときだけ正しいものでした。 同じ失敗をする人がいるかもしれないので、数字ごと残しておきます。
半分ずつで割っている限り、端数はほとんど気になりません。 118円のキャベツを折半すれば59円ずつで、きれいに割り切れます。
問題は比率を変えた瞬間です。収入差があるから3対7にする、 この品目だけ相手が多めに持つ——そういう運用を始めると、 118円の3割は35.4円、7割は82.6円になります。 0.4円は硬貨として存在しません。誰かが飲むしかない。
1回なら誤差です。1日に3枚レシートを撮って、それを3年続けたら、 その誤差は3000回積み上がります。
最初に実装したのは、いちばん素直な方法でした。 端数が出るたびに、負担する側を交互に入れ替える。 1回目はこちらが飲み、2回目は相手が飲み、3回目はまたこちら。
説明しやすく、コードも短く、半分ずつなら完全に公平です。 折半のときに捨てられる端数は必ず0.5円なので、 交互に飲めばちょうど釣り合います。
この時点では、テストも通っていました。 テストが折半の例しか持っていなかったからです。
101円の品目を1000回、パートナーの負担を30%として計算させてみます。 正確な合計は 30,300円ちょうどです。
| 方式 | 1000回後 | 差 |
|---|---|---|
| 正確な比例配分 | 30,300円 | — |
| 交互に負担する | 30,500円 | +200円 |
| 端数の貯金箱(現行) | 30,300円 | 0円 |
200円ずれました。しかもこれはランダムな誤差ではありません。 同じ計算を70%でやると、今度は逆側に200円ずれます。 どちらが損をするかは、比率がどちら側に寄っているかで決まる—— つまり系統的な偏りです。放っておくと、比率を変えた側が一方的に損をし続けます。
交互方式は「何回捨てたか」しか数えていません。 いくら捨てたかを見ていないのが原因です。
0.3円を捨てた回と、0.7円を捨てた回を、同じ「1回」として扱ってしまう。 折半のときだけ、捨てる量が毎回0.5円で揃うので、 回数を数えるだけで偶然うまくいっていたわけです。
公平に見える規則が、条件をひとつ変えただけで系統的に偏る。 しかも偏り方が小さいので、使っている本人にはまず気づけません。
いま動いているのは、回数ではなく金額を持ち越す方式です。 仕組みは単純で、ふたりの間に「端数の貯金箱」を1つ持ちます。
これだけで、どちらが何回払っても、記録と正確な額の差は1円未満に収まります。 増えていかないので、3年使っても偏りません。
同じ人が払い続けたときは、端数の大きさに応じて、負担が回ってくる頻度も自然に変わります。
| 毎回の端数 | 相手が1円を負担する頻度 |
|---|---|
| 0.01円 | 100回に1回 |
| 0.30円 | 10回に3回 |
| 0.50円 | 2回に1回(=従来と同じ) |
| 0.99円 | ほぼ毎回 |
同じ人が払い続ける折半では、1円は1回おきに動き、最初の方式と同じに見えます。 ふたりとも払うときは、相手が払った品目の端数と打ち消し合います。 ここにたどり着くまでに、実はもう一度作り直しています。
最初に作った貯金箱には、向きがありませんでした。 誰が払った品目でも、端数をすべて同じ向きに足していたのです。
これだと、ふたりとも払う場合に偏ります。 Aさんが353円、Bさんが329円を、どちらも半分ずつで払ったとします。 正確には、BさんがAさんに176.5円、AさんがBさんに164.5円を払う計算で、差し引きBさんからAさんへ12円です。 向きのない貯金箱は、1回目の0.5円と2回目の0.5円を足して1円分たまったと数え、2回目の品目でAさんに1円を足しました。 1回目で0.5円足りなかったのはAさんなのに、2回目でもAさんが0.5円多く持つことになり、記録は11円でした。 払う人が入れ替わる組が増えるたびに、1円ずつずれていきます。
いまは、ふたりのうち1人を基準にして、基準の人が払った品目の端数は足し、相手が払った品目の端数は引いています。 さきほどの例なら、1回目で+0.5円、2回目で−0.5円となって貯金箱は0円に戻り、記録は正確な額と同じ12円になります。
決まりどおりに動いていることと、ふたりにとって偏らないことは別でした。 最初の設計は端数の大きさを、1回目の作り直しは誰が払ったかを見ていなかったのが原因です。
正直に言えば、金額としては誤差です。1000回で200円なら、コーヒー1杯分にもなりません。
それでも直したのは、ふたりで使う家計の道具にとって、問題は金額ではなく信頼だからです。 「なんとなく自分ばかり多く払っている気がする」は、根拠がないうちは口に出しにくく、 口に出せないまま残ります。1円が偏らないと分かっていれば、その疑いが最初から生まれません。
公平さは「その1回が公平か」ではなく、 「長く使ったときに収束するか」で測るべきだった—— というのが、作り直して学んだことです。
パシャワリは、レシートを撮ると品目と金額を読み取り、 1枚の中で品目ごとに「どちらが何割」を変えられる ふたり向けの割り勘アプリです。 この記事の端数処理は、そのまま実装に入っています。 読み取りは端末の中だけで行い、レシートの写真はどこにも送りません。
App Store と Google Play から、無料(広告が表示されます)で入れられます。 1円の話をここまで読んでくださった方なら、ずれに気づいたときに 教えていただけるはずだと思っています。
アプリを見る この記事を相手に送る