Convert the currency before adding the amounts.
An assumed USD 100 plus CAD 50 is USD 137.50 when the chosen conversion is USD 0.75 per CAD 1. It is not USD 150. This worksheet reconciles separate cash records, not a real SCHD distribution or a bank conversion. Rates, fees, dates and account records remain necessary for a real comparison.
If two SCHD tools disagree, first establish whether they display the same currency. The same-input audit handles per-payment versus annual units. This page adds a separate currency test; it does not explain any named app's actual discrepancy.
Keep the unit on every row
Our fixture has two distinct nonnegative cash records: A is USD 100 and B is CAD 50. They are not two representations of the same dividend. If an export contains both an original amount and its translated display for one payment, establish event identity before summing. This test neither invents that identity nor connects to an account.
Record A already has the target unit, USD, so its contribution is USD 100. Record B contributes CAD 50 × USD 0.75/CAD = USD 37.50. The CAD units cancel. The aggregate is USD 100 + USD 37.50 = USD 137.50. Dropping the unit labels and adding 100 + 50 produces 150, but that number has no valid common currency under the input contract.
The difference between the wrongly labeled USD 150 and the correctly converted USD 137.50 is USD 12.50. It is a discrepancy created by the test's unit mistake, not a fee or money lost by an investor. No conversion actually occurs when this worksheet reports a common-unit total.
The reciprocal quote changes the operation
Our chosen rate can also be written as exactly 4/3 CAD per USD because 1 ÷ 0.75 = 4/3. Under that inverse label, divide CAD 50 by 4/3 CAD/USD to obtain USD 37.50 again. Multiplying by the inverse quote would instead produce 200/3, about 66.6667, with the wrong unit cancellation. Do not silently reuse a multiply button after changing the quote direction.
The CSV preserves the reciprocal as 4/3 rather than replacing it with 1.33. If 1.33 were chosen instead, 50 ÷ 1.33 = 5000/133, approximately USD 37.59398496. Adding USD 100 then gives approximately USD 137.59398496. That is a different assumed rate, not the exact reciprocal fixture. The calculation retains exact fractions and supplies a decimal rendering separately.
The Bank of Canada daily-rate page states its quotation direction as Canadian dollars for one unit of foreign currency and identifies its rates as indicative. That source explains why a rate needs a direction label. None of its market quotes is used as our chosen 0.75 input.
Reproduce the input boundaries
| Case | Status | USD result |
|---|---|---|
| direct | complete | 37.5 |
| reciprocal | complete | 37.5 |
| zero | complete | 0 |
| zero_missing_rate | unknown_rate | Unknown |
| missing_amount | unknown_amount | Unknown |
| missing_rate | unknown_rate | Unknown |
| zero_rate | invalid_rate | Unknown |
| negative_rate | invalid_rate | Unknown |
| missing_direction | unknown_direction | Unknown |
Download all input cases · Download exact expected conversions
The direct and reciprocal cases both return exactly 75/2 USD, or USD 37.50. A CAD amount of zero with a valid positive rate returns zero. A missing CAD amount, missing rate or missing quote direction produces an unknown result; it never supplies a zero to complete a total. With known record A at USD 100 and unresolved record B, only the known USD subtotal is 100 and the combined total is unknown.
This deliberately strict validator checks conversion metadata even when the CAD amount is zero. Zero CAD with a missing rate therefore returns unknown-rate status. That is our audit contract, not a mathematical claim that zero needs a market price. It ensures the same metadata requirements apply to every foreign-currency row.
A zero or negative rate is invalid, and this nonnegative-receipt fixture rejects negative amounts. A missing currency code remains unknown even if the numeric amount exists. USD 100 needs no exchange quote to remain USD 100; its identity conversion is tested separately. Signed reversals, fees and mixed target currencies require a different declared schema.
Why not convert every past payment at today's rate?
A chosen common rate answers a different question from translating each event with its own documented rate. Before a real reconciliation, declare the intended valuation date, source, direction, rounding and whether values are gross or net. This example does not choose an accounting or tax rule, quote a broker's fee, or infer which rate any tracker used.
For a second independent sensitivity check, choose CAD 50 for each of two events and choose USD-per-CAD rates 0.70 and 0.80. Row-by-row conversion gives USD 35 + USD 40 = USD 75. Translating their CAD 100 total at a chosen later rate of 0.80 gives USD 80 instead. The USD 5 difference comes entirely from the selected translation rule; neither result is an additional distribution. Both rules and every rate here are synthetic.
Can this diagnose my tracker?
Only with the actual record scope and documented display settings. Match the currency, event identity, date window and gross/net basis before interpreting a difference. A public reader discussion reports differing app totals, including CAD figures. It motivates a comparison question, but does not establish that currency caused that reader's result.
Evidence and limits
Source read October 24, 2026: Bank of Canada quotation-direction guidance linked above. Every numeric cash and rate input is an explicit assumption generated for this worksheet. Exact-fraction results were counterchecked with decimal arithmetic. Fresh reads of the three fixed comparator calculators informed presentation only; their prices, yields and projections are not inputs. The independent contribution is this reproducible currency-unit fixture and its boundary outputs, not a claim of global originality.