A report can add line items, apply a rate, and print a final total.

Calculate report totals

taxPercent
report_totals.swift
Replay: real traced execution (multi-file project)
let taxPercent = 8
let pricesInCents = [1200, 800, 500]
let subtotal = pricesInCents.reduce(0, +)
let tax = subtotal * taxPercent / 100
let total = subtotal + tax
let message = "total_cents=\(total)"

print(message)
let taxPercent = 0
let pricesInCents = [1200, 800, 500]
let subtotal = pricesInCents.reduce(0, +)
let tax = subtotal * taxPercent / 100
let total = subtotal + tax
let message = "total_cents=\(total)"

print(message)
let taxPercent = 10
let pricesInCents = [1200, 800, 500]
let subtotal = pricesInCents.reduce(0, +)
let tax = subtotal * taxPercent / 100
let total = subtotal + tax
let message = "total_cents=\(total)"

print(message)
  1. taxPercent ← 8, pricesInCents ← [1200, 800, 500], subtotal ← 2500

    1let taxPercent→ 8 = 8  //@taxPercent=0, 102let pricesInCents→ [1200, 800, 500] = [1200, 800, 500]3let subtotal→ 2500 = pricesInCents[1200, 800, 500].reduce(0, +)4let tax→ 200 = subtotal2500 * taxPercent8 / 1005let total→ 2700 = subtotal2500 + tax2006let message→ total_cents=2700 = "total_cents=\(total2700)"78print(messagetotal_cents=2700)
    outputtotal_cents=2700
  1. taxPercent ← 0, pricesInCents ← [1200, 800, 500], subtotal ← 2500

    1let taxPercent→ 0 = 02let pricesInCents→ [1200, 800, 500] = [1200, 800, 500]3let subtotal→ 2500 = pricesInCents[1200, 800, 500].reduce(0, +)4let tax→ 0 = subtotal2500 * taxPercent0 / 1005let total→ 2500 = subtotal2500 + tax06let message→ total_cents=2500 = "total_cents=\(total2500)"78print(messagetotal_cents=2500)
    outputtotal_cents=2500
  1. taxPercent ← 10, pricesInCents ← [1200, 800, 500], subtotal ← 2500

    1let taxPercent→ 10 = 102let pricesInCents→ [1200, 800, 500] = [1200, 800, 500]3let subtotal→ 2500 = pricesInCents[1200, 800, 500].reduce(0, +)4let tax→ 250 = subtotal2500 * taxPercent10 / 1005let total→ 2750 = subtotal2500 + tax2506let message→ total_cents=2750 = "total_cents=\(total2750)"78print(messagetotal_cents=2750)
    outputtotal_cents=2750
report total Business reports often reduce a list of numbers into a subtotal, then apply a small final adjustment.