税抜き金額と税率が与えられている場合に
- 税抜き金額から税込み金額を端数切り捨てで求める。
- 1で求めた税込み金額から端数切り上げでもう一度税抜き金額を求める。
上記の手順を踏んだ時、元の税抜き金額と2で求めた税抜き金額が違う金額になるケースは
どのぐらいあるのだろうか?
そんな疑問をもって以下のコードを書きました。
C#
1static void Main(string[] args) 2{ 3 var withoutTaxes = Enumerable.Range(1, 100000) 4 .Select(i => (decimal)i) 5 .ToArray(); 6 7 var taxRates = Enumerable.Range(3, 50) 8 .Select(i => i * 0.01m) 9 .ToArray(); 10 11 var prices = taxRates 12 .SelectMany(_ => withoutTaxes, (taxRate, witoutTax) => new { taxRate, witoutTax }) 13 .Select(x => new { x.witoutTax, withTax = Math.Floor(x.witoutTax * (1 + x.taxRate)), x.taxRate }) 14 .ToArray(); 15 16 var errorPrices = prices 17 .Select(p => new { p.witoutTax, p.withTax, calcWithoutTax = Math.Ceiling(p.withTax / (1 + p.taxRate)) , p.taxRate}) 18 .Where(p => p.witoutTax != p.calcWithoutTax) 19 .ToArray(); 20}
実行してみたら errorPrices は 0 でした。
Ceiling, Floorを共に Round にしても errorPrices は 0 でした。
感覚的には丸め処理を2回もしているので誤差が出るのが当然だと思っていました。
なぜこのコードでは誤差が現れないのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/06 19:44