Search the site

What are you looking for?

Enter a broker, tool or topic.

Orders & execution

Cross Exchange Rate: Calculate Bid and Ask Without Losing the Spread

Build a currency cross from two complete quotes. Check directions, units and both conversion chains, then reproduce the result in a spreadsheet with your own inputs.

Author · Editor

Reviewed

Two dark teal stepped paths meet at a small amber insert and continue as one path on pale travertine, with a pale blue glass divider behind them and soft leaf shadows.
Check your own two-leg conversion

The essentials

  1. A BASE/QUOTE rate means QUOTE units per BASE unit. Follow those units before choosing multiplication or division.

  2. Reversing a quote swaps its sides: inverse Bid = 1/Ask and inverse Ask = 1/Bid.

  3. A normalized BASE/VEHICLE and VEHICLE/QUOTE chain uses Bid × Bid to sell BASE and Ask × Ask to buy BASE.

  4. A synthetic cross checks arithmetic. It does not prove that both legs are simultaneous, executable or profitable.

Record what the two quotes actually mean

You have EUR/USD and USD/JPY but need EUR/JPY. Multiplying two numbers looks easy; the practical problem is deciding which numbers, which side of each quote and which currency amount the answer describes. Copying the displayed order without checking units can produce a plausible number for the wrong conversion.

A cross exchange rate expresses one currency in another through an intermediate currency. The Reserve Bank of Australia’s explanation illustrates this relationship through a third currency. Here, EUR/USD means USD per EUR: the first code is the base currency and the second is the quote currency. The slash in the pair name is a quoting convention, not an instruction to divide the two currency amounts.

Record

Why it matters

Both currency pairs, in their original order

Exactly three distinct currencies must form one two-leg path. The shared currency is the vehicle.

Bid and Ask for each pair

Bid is the rate at which the quoting party buys the base currency; Ask is the rate at which it sells the base currency.

Source, observation time and time zone

Two prices seen on one screen need not have been updated at the same time. Record each source’s actual timestamp.

Settlement basis and amount restrictions

Comparable labels alone do not establish the same value date, available size or terms.

Desired target pair and optional base amount

EUR/JPY and JPY/EUR answer opposite questions. A quantity belongs to the target base currency, not to lots or margin.

Scroll sideways to compare all columns ↔

For your own data, keep the original quote alongside the calculation. If only a midpoint is available, you cannot reconstruct a genuine Bid/Ask spread from it. The Bid/Ask guide explains the two sides separately; this guide uses them to build a different currency pair.

Normalize directions and preserve the inverse spread

Name the target currencies A and B and the shared currency V. Rewrite the two legs as A/V and V/B. This gives the units V per A and B per V; V cancels when you multiply. It works regardless of which row appears first or whether either original pair is reversed.

If the source already quotes the required direction, keep both sides unchanged. If it quotes the opposite direction, use inverse Bid = 1/original Ask and inverse Ask = 1/original Bid. Taking 1/Bid as the new Bid would exchange the wrong economic sides and usually produce a crossed quote. The MNB handbook, section 2.6, develops cross quotations through the corresponding buy and sell transactions.

Source direction

Normalized Bid

Normalized Ask

A/V, already in the first required direction

Original Bid

Original Ask

V/A, opposite to the first required direction

1/original Ask

1/original Bid

V/B, already in the second required direction

Original Bid

Original Ask

B/V, opposite to the second required direction

1/original Ask

1/original Bid

Scroll sideways to compare all columns ↔

These choices cover all four combinations of input directions. Swapping the two input rows must not change the target result. Requesting B/A instead must produce 1/(A/B Ask) for its Bid and 1/(A/B Bid) for its Ask. Use these identities as checks, not as a reason to round and re-enter already rounded inverse quotes.

Keep the original decimal quotes intact. An inverse often has an infinite decimal expansion; its fraction is exact, while a displayed decimal approximation is not a new exact input.

Follow a complete EUR/USD → USD/JPY example

The following quotes are invented teaching inputs, labelled 2026-11-10T12:00Z for the exercise. They are not observations from that time. Assume one hypothetical observation and matching settlement terms: EUR/USD Bid 1.1000, Ask 1.1002; USD/JPY Bid 150.00, Ask 150.02. Both legs already point in the required direction for EUR/JPY.

Result

Exact calculation

Units

EUR/JPY Bid

1.1000 × 150.00 = 165

JPY per EUR

EUR/JPY Ask

1.1002 × 150.02 = 165.052004

JPY per EUR

Calculated spread

165.052004 − 165 = 0.052004

JPY per EUR

Scroll sideways to compare all columns ↔

To sell 10,000 EUR through this chain, first sell EUR at the EUR/USD Bid: 10,000 EUR × 1.1000 USD/EUR = 11,000 USD. Then sell those USD at the USD/JPY Bid: 11,000 USD × 150.00 JPY/USD = 1,650,000 JPY. The intermediate amount and its currency explain why both Bid sides are used.

To buy 10,000 EUR, first calculate how many USD the EUR/USD Ask requires: 10,000 EUR × 1.1002 USD/EUR = 11,002 USD. Buying those USD at the USD/JPY Ask requires 11,002 USD × 150.02 JPY/USD = 1,650,520.04 JPY. The funding flow is JPY → USD → EUR, although the required amounts are calculated backward from the desired EUR quantity.

The difference between those two JPY amounts is 520.04 JPY under these fixed assumptions. It is the difference between a purchase cost and sale proceeds for the same base amount, not a trading profit, broker invoice or prediction. No fee, market movement, quantity tier or settlement adjustment is included.

Keep 165.052004 throughout the calculation. Rounding it to 165.05 before multiplying by 10,000 would understate the purchase cost by 20.04 JPY. Display formatting may shorten a result; it must not silently change the value used downstream.

Divide when both original pairs quote the same currency

Now use fictional EUR/USD 1.1000/1.1002 and GBP/USD 1.2500/1.2503 to obtain EUR/GBP. USD is the vehicle, but the second leg is quoted GBP/USD. Normalize it to USD/GBP by reversing both direction and sides. This is why the denominator side differs from the numerator side.

Target side

Exact formula

Result in GBP per EUR

Bid

EUR/USD Bid ÷ GBP/USD Ask = 1.1000 ÷ 1.2503

11000/12503 ≈ 0.879788850675837799

Ask

EUR/USD Ask ÷ GBP/USD Bid = 1.1002 ÷ 1.2500

0.88016, exactly

Scroll sideways to compare all columns ↔

Selling EUR gives USD at the EUR/USD Bid; those USD buy GBP at the GBP/USD Ask. Buying EUR requires USD at the EUR/USD Ask; selling GBP supplies those USD at the GBP/USD Bid. Dividing Bid by Bid and Ask by Ask would miss this change of direction.

For 10,000 EUR, the exact sale proceeds are 110000000/12503 GBP, approximately 8,797.88850675837799 GBP; the exact purchase cost is 8,801.6 GBP. Any settlement rounding belongs to the relevant agreement, not to this algebra. CME’s fixing methodology also uses EUR/USD divided by GBP/USD for an EUR/GBP fixing. That verifies the currency relationship; a fixing ratio does not by itself supply executable two-sided quotes.

Check your own two-leg conversion

Try it yourself

Check a cross exchange rate, side by side

Enter two two-sided quotes and the target pair. The calculator follows the currency units, reverses a quote when needed and shows both the selling and buying chain.

BASE/QUOTE means quote-currency units per one base unit. Bid is the rate when you sell the base currency; Ask is the rate when you buy it. Reversing a quote swaps the sides: inverse Bid = 1 / original Ask; inverse Ask = 1 / original Bid.

Fictional examples

Use three-letter codes, for example EUR, USD and JPY. The two input pairs must share exactly one currency. The target uses the other two, in either order. Codes label your entries; they do not select a quote feed.

First input quote
Second input quote

Use a decimal point or comma without thousands separators, currency symbols or exponent notation. Each Bid and Ask must be positive, with Bid no greater than Ask.

Target pair and common observation time

Enter YYYY-MM-DDTHH:mmZ, for example 2026-11-10T12:00Z. This declares one common UTC observation time. The form checks the format, not whether quotes were actually simultaneous or had matching value dates.

Leave quantity blank for rates only. A supplied quantity is in the target base currency, not lots, margin or profit. Both alternative transaction amounts are shown.

Input limits and precision

Rates: greater than zero and at most 1,000,000; at most 12 decimal places. Optional quantity: greater than zero and at most 1,000,000,000,000; at most 6 decimal places. At most 80 characters per numeric input. Real UTC dates in 1900–2200. Inputs are calculated as exact fractions; no intermediate rounding is applied.

Fixed fictional reference · separate from your entries

Assumed observation time: 10 November 2026, 12:00 UTC. EUR/USD 1.1000/1.1002 and USD/JPY 150.00/150.02 are invented, simultaneous quotes with a matching settlement basis. They are not observed market prices. This full reference remains available without JavaScript.

EUR/JPY · JPY per 1 EUR · intermediate currency USD.

Declared common observation time: Nov 10, 2026, 12:00 UTC.

Cross Bid · sell EUR
165JPY per 1 EUR
Cross Ask · buy EUR
165.052004JPY per 1 EUR
Quotes in their original directions
Currency pairBidAskRate unitInput row
EUR/USD1.11.1002USD per 1 EUR1
USD/JPY150150.02JPY per 1 USD2
Quotes oriented along the target currency chain
Currency pairBidAskRate unitInput rowDirection
EUR/USD1.11.1002USD per 1 EUR1As entered
USD/JPY150150.02JPY per 1 USD2As entered

Tables can scroll horizontally. Focus a table region and use the arrow keys to inspect all columns.

Cross Bid = first normalized Bid × second normalized Bid.

1.1 × 150 = 165

Cross Ask = first normalized Ask × second normalized Ask.

1.1002 × 150.02 = 165.052004

Cross spread = Ask − Bid: 0.052004 JPY per EUR.

Sell the target base currency

Sell 10,000 EUR: multiply by each normalized Bid to obtain the amount received at each step.

  1. EUR10,000
  2. USD11,000
  3. JPY1,650,000

Selling 10,000 EUR gives 1,650,000 JPY under the entered quotes.

Buy the target base currency

Buy 10,000 EUR: the first Ask determines the intermediate amount required and the second Ask its cost. Amounts are listed from desired base to total funding required; funds move in the reverse order.

  1. EUR10,000
  2. USD11,002
  3. JPY1,650,520.04

Buying 10,000 EUR costs 1,650,520.04 JPY under the entered quotes.

The two chains are alternative calculations, not a round-trip profit. They exclude separate charges, settlement rounding, size limits and execution risk. A derived quote does not establish an available trade or an arbitrage opportunity.

Terminating decimals are exact. Repeating decimals carry ≈ and an exact fraction; the decimal display is rounded to 18 significant digits. Display rounding never feeds the calculation. The CSV retains exact fractions and units.

This component keeps entries in page memory. It does not send them to a server or write persistent browser storage. This statement does not cover sitewide analytics.

Enter the two original pairs and their Bid/Ask values, select the target orientation, and supply a common declared UTC observation label. Add a quantity only if you want currency amounts. Calculate to inspect the normalized legs, target quote and both paths. Presets are teaching data, and the fixed reference remains separate from your entered result.

Each rate must be positive and no greater than 1,000,000, with at most 12 decimal places. The optional base quantity must be positive and no greater than 1,000,000,000,000, with at most 6 decimal places. Inputs are limited to 80 characters. A decimal point or comma is accepted, without thousands separators or exponent notation; a leading plus sign is allowed. Leaving quantity empty omits amounts rather than treating the quantity as zero.

Use three-letter currency codes. The checker validates the code format and the connection between the pairs; it does not certify that every typed code is an official currency. The observation label uses YYYY-MM-DDTHH:mmZ in UTC, within 1900–2200. Recording that label does not verify the freshness or simultaneity of the source quotes.

A Bid above its Ask, a repeated currency within one pair, disconnected pairs or a target involving the vehicle produces an error. Equal Bid and Ask is valid. Correct the source rather than exchanging the sides merely to make validation pass. Editing any field hides the previous calculated result and its CSV until you calculate again.

The checker retains inputs only in page memory and does not send them to a server or persistent storage. Site-wide analytics are a separate matter. Without JavaScript, use the full fixed example, reference CSV and verification protocol; the editable calculation controls are unavailable.

Reproduce the result in a spreadsheet

Create a small worksheet from the original values, with a separate column recording each rate’s units. Put the first leg’s Bid in B2 and Ask in C2, the second leg’s Bid in B3 and Ask in C3, and quantity 10000 in B5. In the multiplication example, row 2 is EUR/USD and row 3 is USD/JPY. Keep the source strings or original quote record beside the numeric cells.

Check

Spreadsheet formula

Reference result

Cross Bid

=B2*B3

165

Cross Ask

=C2*C3

165.052004

Sale proceeds

=B5*B2*B3

1650000 JPY

Purchase cost

=B5*C2*C3

1650520.04 JPY

Inverse cross Bid

=1/(C2*C3)

Exact reciprocal of 165.052004

Inverse cross Ask

=1/(B2*B3)

1/165

Scroll sideways to compare all columns ↔

For the division example, retain EUR/USD in row 2 and replace row 3 with GBP/USD 1.2500/1.2503. The cross formulas become =B2/C3 for Bid and =C2/B3 for Ask. Multiply each by B5 to obtain GBP amounts. Change the currency labels at the same time; a correct numeric cell with a stale JPY label is still an incorrect result.

Apply cell formatting to the displayed values rather than ROUND inside the calculation chain. Spreadsheet software generally uses finite-precision arithmetic, so an inverse such as 11000/12503 cannot be stored as an unlimited decimal. Compare enough displayed digits and retain the exact fraction from the export. Local spreadsheet settings may change the decimal separator; these formulas use only arithmetic operators, not localized function names.

When importing the CSV into a spreadsheet, set columns containing exact fractions and long integers to text. Automatic number or date conversion can discard digits or reinterpret a fraction; retain the original export as the exact record.

Finally, swap the input rows in the checker and reverse the requested target. The original target must remain unchanged after the row swap, and the reverse target must satisfy the reciprocal-side identities. This checks direction handling independently of whether a displayed rate happens to look familiar.

Stop at missing information and keep a verification record

A useful result includes what could not be established. Start the downloadable protocol with the original pair labels, full Bid/Ask strings, source identifiers, observation times and time zones, settlement basis and requested amount. Record the target pair, each normalization and both final units. Preserve these inputs before simplifying the arithmetic.

  • Only one price or a midpoint: mark the spread as unknown. Do not create a second side by assuming a typical spread.
  • Different or missing timestamps: record the mismatch. A common label typed into the checker does not synchronize the source observations.
  • Unknown settlement date or incomparable instruments: obtain matching terms. A spot quote and a forward quote are not interchangeable inputs.
  • Unknown available size, fees or rounding rules: keep them unknown and separate from the mathematical currency amounts.
  • A crossed or disconnected input: check the copied pair order and source values. Do not silently repair it by sorting prices or changing a currency code.

The exported result preserves original quotes, normalized directions, currency units, assumptions and exact fractions. A terminating decimal is exact; a non-terminating decimal is explicitly approximate. Keep the calculation together with its source record. A CSV produced by the checker documents the supplied data and arithmetic, not the existence of a market quote.

Separate a calculated cross from a tradable price

The calculated Bid/Ask is the synthetic two-leg relationship implied by your inputs. A directly quoted EUR/JPY price may differ because the quotes were sampled at different times or have different size, source, fees or settlement terms. The checker does not contact a venue, verify depth or submit orders, so it cannot establish that either conversion chain could be completed at the displayed values.

Likewise, comparing the synthetic cross with a direct quote is not an arbitrage test. Such a claim would require contemporaneous executable sides, matching quantities and settlement, all costs and a feasible execution sequence. This guide gives you a defensible arithmetic check and a list of unresolved inputs, not a recommendation to trade.

Do not label 0.052004 JPY per EUR as 0.052004%, or assume it is a particular number of platform points. The pips, points and ticks guide covers those unit conventions. The slippage guide addresses a different comparison: an actual execution against a specified reference price.

If you are converting signed adjustments from spot to a forward outright, use the forward-points guide. A cross combines two currency relationships; forward points change the rate for a specified future settlement. Keeping these tasks separate prevents a time adjustment from being mistaken for another currency leg.

Frequently asked questions

Does a cross rate always multiply two rates?

No. Multiplication works after the legs are normalized as A/V and V/B. With A/V and B/V, the second leg must be inverted, which becomes division with crossed denominator sides: Bid/Ask for the cross Bid and Ask/Bid for the cross Ask.

Can I calculate with only a midpoint?

You can derive a relationship between two scalar reference rates, but you cannot infer the original Bid and Ask from those midpoints. This checker requires both sides. Entering the same known reference value on both sides is an explicit zero-spread assumption, not a reconstruction of a market quote.

Why do inverse Bid and Ask swap?

Selling the new base currency is the opposite economic direction to buying the old base currency. The new Bid therefore uses the old Ask’s reciprocal. Both inverse sides remain ordered because all accepted rates are positive.

Is the amount output a profit or an account balance?

Neither. It is a quote-currency receipt for selling the stated base amount or a quote-currency cost for buying it under the supplied quotes. No initial cost basis, positions, cash balance, fees or margin model is included.

Why does the export contain a fraction?

Division can produce a decimal that never terminates. A reduced fraction preserves the exact ratio of the entered decimals. The displayed approximation is rounded to 18 significant digits; it is not fed back into the calculation.

Must the vehicle currency be USD?

No. The method works for any three distinct valid currency identities with one shared intermediate currency. Currency codes identify the path; the checker does not assign a special formula merely because USD appears.

Sources & further reading

Orders & execution
Understand Bid and AskEstablish which side applies before building a two-leg currency cross.Pips, points and ticksKeep rate differences separate from platform-specific price units.Forward pointsConvert signed adjustments for a future settlement without confusing them with a cross rate.SlippageCompare an actual fill with its reference price after execution.
All guides