ポイント送信手数料の計算誤差

はてな義援金ポイント送信の手数料に関して。

ポイント送信時の手数料について
コメント欄にてご要望頂きましたポイント送信時の5%の手数料についてですが、システムの制約上、手数料は無くすことができません。システムでの対応は難しいですが、5%のポイント送信手数料についてはそのまま同額をはてなにて上乗せし、寄付したいと思います。

http://d.hatena.ne.jp/hatenacontrib/20041024


そのまま同額というのは正確ではなく、誤差を含む計算方法が使われています。
現在のやり方は、集まった総ポイント数の5%にあたるポイントを送信手数料としています。
実際に送信する場合の手数料も基本的には5%ですが、ポイント未満が1に満たない場合には切り上げになるため最高で100%にまで変化します。1ポイント送信時の手数料が1ポイントで、このときが最大の割合になります。


この違いによって発生する差について、具体例を挙げて説明してみます。


1.40ポイントを1度に送信した場合
送信手数料は40×0.05で、2ポイントとなります。手数料込みで42ポイントが送信されています。
この場合は42ポイントが義援金として寄付されます。


2.21回に分けて送信した場合
手数料込みで42ポイントを送信する別のやりかたとして、1ポイントを21回送信する場合を考えます。1ポイント送信で、手数料も1ポイント。2×21で、合計42ポイントを送信するのは1.と同じです。
しかし、送られてきたポイントは21ポイントで、この5%は約1ポイントになります。
この場合は、21ポイントが義援金として寄付されます。


つまり2.の場合では、手数料込みで42ポイントを送信したのは1.と同じであるものの、義援金として寄付される額は22ポイントなので、20ポイントの差が生じています。

ポイント送信時の手数料が、5%以下になることもあります。手数料が1ポイント以上の場合は、小数点以下が切り捨てになるからです。39ポイントを送信する場合の手数料は1ポイントで、これは約2.56%です。
割合として見ると違いますが、どちらも1ポイント以下の丸めによるもので、差の最大値は0.95ポイントです。

つまり1回の送信あたり、5%で計算したものと最大±0.95ポイントの差が出る場合があるというわけです。

総ポイント数に対して5%を計算するのではなく、各ポイント送信に対して手数料を計算して合計すれば誤差は生じません。