Ruby

合計を求める

設問
消費税込売上の金額が格納された配列(sales)を想定します。この売上の合計、税抜合計、税額をそれぞれ最大少数2桁まで表示するプログラムを作成してください。税率は8%とします。丸めの方法は任意ですが、税抜合計と税額の和が必ず税込合計額と一致するように配慮してください。

解答例
以下が解答例です。BigDecimalの使い方を解説する問題にするつもりだったんですが、必要なかったですね…。しかし、この問題は多くの示唆に富んでいます。今回、全体の合計に税率を掛けて税額を出していますが、この売上げがそれぞれ別個のタイミングで入ってきているとすると、その都度、整数値に丸めを行ってお金のやり取りをしていますから、実際に回収した金額と、ここで求めた金額が異なってきます。この辺りはビジネスの方針によって変わってきますが、一見簡単そうに見えるプログラムでも、実運用に乗せた途端に沢山の検討事項が出てくることは良く起こります。

tax.rb
sales = [980,640,520]

TAX_RATE = 0.08

sum = 0
sales.each do |s|
  sum += s
end

tax = (sum * TAX_RATE).round(2)

puts "合計: %d" % [sum]
puts "税抜合計: %.2f" % [sum - tax]
puts "税額: %.2f" % [tax]

以下が実行例です。

実行例
$ ruby tax.rb
合計: 2140
税抜合計: 1968.80
税額: 171.20

参考URL