The mid-market rate is a midpoint, not a price
The rate you see quoted in the news and in converters is the mid-market rate: the midpoint between the interbank bid and ask. Nobody actually transacts at it. It is a reference, and it is the right reference precisely because it is unbiased.
Your real price is mid-market plus a spread plus, often, a fixed fee. A 'zero-commission' bureau simply moves the entire margin into the spread.
Where the numbers come from
Rates aggregate from interbank feeds, central bank reference publications (the ECB posts daily around 16:00 CET) and market data vendors. Free public APIs typically refresh hourly to daily; trading feeds refresh in milliseconds.
Because sources differ, two converters can legitimately disagree in the fourth decimal place. Always display the timestamp of the rate you used.
Understanding the spread you pay
Major pairs such as EUR/USD carry retail spreads of 0.3–1%. Exotic pairs and airport bureaux can exceed 8%. Card networks add 1–3% on top of their own wholesale rate, and dynamic currency conversion at the terminal is almost always the worst option offered.
Effective rate = amount received ÷ amount sent. Compute it after every transfer and compare with the mid-market rate at the time to see what you really paid.
Rounding and accuracy in code
Never hold money in floating-point. Use integer minor units (cents, paise) or a decimal library, and round only at the final presentation step using the currency's own exponent — 2 for USD and EUR, 0 for JPY and KRW, 3 for BHD and KWD.
For cross rates, pivot through the base currency of your feed: GBP→JPY = (GBP→USD) × (USD→JPY). Rounding at the intermediate step introduces error that compounds across large amounts.

