実現したいこと
単純の計算式だと
税込価格 / 1.1 -> 本体価格、税込価格 / 1.1 * 0.1 -> 消費税額
になりますが、金額によって変な結果(計算結果が間違っているわけではない)になってしまいます。どのような計算をすれば良いのか?あるいは、どのように実装・運用されているのか教えてください。
(ひとまず小数点以下は切り捨てで統一、状況を単純化するため税率は10%に固定)
発生している問題・分からないこと
どの言語でも同様だと思いますので、エクセルの関数で代表させます
本体価格 = ROUNDDOWN(税込価格 / 1.1)
消費税額 = ROUNDDOWN(税込価格 / 1.1 * 0.1)
(問題ない事案)
税込価格 = 55,000 → 本体価格 = 50,000、消費税額 = 5,000
(問題あり1)
税込価格 = 54,999 → 本体価格 = 49,999、消費税額 = 4,999
計算結果から本体価格と消費税額を足すと、54,998 になり出発点である税込価格の54,999と矛盾する
(問題あり2)
上記の問題発生により計算式を変更する
消費税額 = ROUNDDOWN(税込価格 / 1.1 * 0.1)
本体価格 = 税込価格 - 消費税額
税込価格 = 54,999 → 消費税額 = 4,999、本体価格 = 50,000
計算結果の本体価格を出発点として消費税額を計算すると5,000円になるはず
1円ずつ違う値にすると、11回に1回サイクリックにこのような結果になる金額に遭遇します。(なので解決できる何らかのアルゴリズムがあるのかもしれません)
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
同じ疑問に言及するものはありませんでした。
切り捨て(切り上げ)が計算途中に含まれるので誤差が出るのは理屈ですが、レシートなどで表示されたときそれを見た人が「ん?」とならない方法はないものかというのが質問の動機です。
(50,000円に対する消費税額が4,999円と表示されていたら、ん?とは思うけど得した気分になるから文句は言われないと思いますが...)
補足
特になし