---
title: "Multi-Currency Accounting: Exchange Rates, FX Gains and Losses, and Base Currency"
description: "Multi-currency accounting explained: base vs transaction currency, foreign invoices, exchange rates by date, realised and unrealised FX gains and losses."
canonical: https://ledgeriano.com/guides/multi-currency-accounting
language: en
published: 2026-09-15
updated: 2026-09-25
---

# Multi-Currency Accounting: Exchange Rates, FX Gains and Losses, and Base Currency

Multi-currency accounting records each transaction in its own currency and converts it to one base currency at the rate for its date. When the rate changes before settlement or at period end, the difference is booked as a foreign exchange gain or loss.

- Keep the books in one base currency and record each transaction in its own currency at the rate on its date.
- Revenue and expenses stay at the historical rate; only monetary balances are revalued.
- Settling a foreign invoice at a new rate produces a realised FX gain or loss; period-end retranslation produces an unrealised one.
- Ledgeriano uses the latest stored rate on or before the entry date unless you type a rate, and rounds base amounts so entries always balance.
- Reports are in base currency, while the ledger keeps the foreign amounts on every line.

Multi-currency accounting means recording transactions in the currency they actually happen in (euros, dirhams, pounds) while keeping the books and financial statements in one base currency. Every foreign currency line is converted at an exchange rate, and when that rate moves before an invoice is settled, the difference becomes a foreign exchange gain or loss.

This guide explains base and transaction currencies, how to record a foreign currency invoice, how stored exchange rates and the date fallback rule work, rounding, realised FX gains and losses on settlement, period-end revaluation under IAS 21, and how Ledgeriano reports everything in base currency without losing the original foreign amounts.

## What is multi-currency accounting?

Multi-currency accounting is the practice of keeping one set of books in a single base currency while accepting transactions denominated in other currencies. Each foreign amount is translated into the base currency at an exchange rate on the transaction date, so the ledger always balances in base currency, and the foreign amount is kept alongside for reference and settlement.

You need it the moment any of these happens:

- You invoice a customer abroad in their currency.
- You buy from a supplier who bills in a foreign currency.
- You hold a bank account in a second currency.
- A group company with a different base currency trades with you.

Spreadsheet workarounds (typing the converted amount only) lose the foreign balance, so you cannot tell how many euros a customer still owes. A proper system stores both.

## Base currency vs transaction currency

The base currency is the one your books and reports are kept in; the transaction currency is the one a specific invoice or payment is denominated in. IAS 21 uses slightly different terms, and it helps to know them.

| Term | Meaning | Example for a Dubai trading company |
|---|---|---|
| Functional currency (IAS 21) | Currency of the primary economic environment the business operates in | AED |
| Base currency (software term) | Currency the ledger and reports are kept in, normally the functional currency | AED |
| Transaction (foreign) currency | Currency an individual transaction is denominated in | EUR invoice to a German customer |
| Presentation currency | Currency the financial statements are presented in, if different | USD for a group report |

Pick the base currency carefully: it is set when you create a business in Ledgeriano and every report uses it. A group with companies in several countries usually gives each company its own base currency, which the [multi-entity accounting guide](https://ledgeriano.com/guides/multi-entity-accounting) covers.

## Recording a foreign currency invoice

To record a foreign currency transaction, enter the amounts in the foreign currency and let the system convert each line to base currency at the exchange rate for that date. Here is the simplest possible case.

A US company (base currency USD) sells goods to a customer in Spain and invoices **EUR 100** on 10 March 2026. The rate that day is **1 EUR = 1.10 USD**.

| Account | Party | EUR debit | EUR credit | USD debit | USD credit |
|---|---|---|---|---|---|
| 1111 Trade receivables | Iberia Retail | 100.00 | | 110.00 | |
| 4101 Sales of goods | | | 100.00 | | 110.00 |

The entry balances in both currencies. Revenue is recognised at USD 110, the historical rate, and it will never change: a later rate movement affects only the receivable, not the sale.

In Ledgeriano an entry carries one currency and one exchange rate in its header. You choose EUR, type the euro amounts on each line, and the base amounts are calculated automatically. The same works for purchases, expenses paid by a foreign card and transfers into a foreign currency bank account (1105 in the IFRS template).

## Exchange rates: stored by date, with a fallback rule

Exchange rates are stored per currency and per date, and each entry uses the latest rate on or before its date unless you type a rate yourself. This keeps rates consistent across a team and lets entries arriving through the [accounting API](https://ledgeriano.com/developers) be converted without a rate in every request.

Rates in Ledgeriano are quoted as "1 unit of foreign currency = rate × base currency", so for a USD business, EUR at 1.10 means one euro is worth 1.10 dollars. Saving a rate for a date that already has one replaces it. You cannot store a rate for the base currency itself, and only currencies that are active on the platform can be used.

Suppose these EUR rates are stored:

| Rate date | 1 EUR in USD |
|---|---|
| 1 March 2026 | 1.08 |
| 10 March 2026 | 1.10 |
| 20 March 2026 | 1.12 |

How entries on different dates are converted:

1. An entry dated **10 March** uses 1.10 (exact match).
2. An entry dated **15 March** uses 1.10 (the latest rate on or before 15 March).
3. An entry dated **25 March** uses 1.12.
4. An entry dated **25 February** is rejected with an "exchange rate missing" error, because no rate exists on or before that date. Store a rate or type one on the entry.

A rate typed on the entry always wins over the stored table. That is useful when your bank applied a specific rate to a transfer and you want the books to match the bank statement exactly.

> Which rate should you store? IAS 21 requires the spot rate at the date of the transaction, and allows an average rate for a week or month if rates do not fluctuate significantly. Many companies store their central bank's daily rate; some store a weekly average. Whatever you choose, document it and apply it consistently.

## Rounding to the base currency

Base amounts are rounded to two decimals line by line, and any rounding difference that would unbalance the entry is added to the largest line on the short side. The foreign amounts always balance first; the base currency balance is then protected automatically.

Example: an entry in EUR at a rate of 1.1111 with three debit lines and one credit line.

| Line | EUR | Exact USD | Rounded USD |
|---|---|---|---|
| Debit 1 | 33.33 | 37.032963 | 37.03 |
| Debit 2 | 33.33 | 37.032963 | 37.03 |
| Debit 3 | 33.34 | 37.044074 | 37.04, adjusted to 37.05 |
| Credit | 100.00 | 111.110000 | 111.11 |

The rounded debits add up to 111.10 against a credit of 111.11. The one-cent difference is added to the largest debit line, so debits and credits both total USD 111.11. Without this rule, entries with many lines at unusual rates could fail to balance by a cent or two.

## Settlement and realised FX gain or loss

When a foreign invoice is paid at a different rate from the one used to record it, the base currency difference is a realised exchange gain or loss, recognised in profit or loss on the settlement date. The foreign balance goes to zero; a small base currency balance remains and must be cleared to the FX account.

Take a larger invoice: **EUR 5,000** billed on 10 March at 1.10, so the receivable is **USD 5,500**. The customer pays on 15 April.

### Case 1: the euro weakens (loss)

The rate on 15 April is 1.08, so the euros received are worth USD 5,400.

| Step | Account | EUR | USD debit | USD credit |
|---|---|---|---|---|
| Receipt (EUR entry at 1.08) | 1105 Bank, foreign currency account | 5,000 Dr | 5,400 | |
| | 1111 Trade receivables (Iberia Retail) | 5,000 Cr | | 5,400 |
| Clear difference (USD entry) | 7103 FX gains and losses | | 100 | |
| | 1111 Trade receivables (Iberia Retail) | | | 100 |

After the receipt, the customer's balance is EUR 0 but USD 100 (5,500 - 5,400). The second, base currency entry clears it and records a USD 100 exchange loss.

### Case 2: the euro strengthens (gain)

If the rate on 15 April is 1.13, the euros are worth USD 5,650. The receipt credits the receivable by 5,650, leaving a USD 150 credit balance, and the clearing entry is: debit 1111 Trade receivables 150, credit 7103 FX gains and losses 150.

The textbook shows the same thing as one combined entry (debit bank 5,650, credit receivables 5,500, credit FX gain 150). Ledgeriano records it in two entries because each entry has one currency and one rate: the first keeps the euro amounts in the bank and customer ledgers, the second is a plain base currency adjustment. The result in the accounts is identical.

For suppliers the logic flips: if you owe EUR and the euro strengthens before you pay, you pay more base currency and book a loss.

## Period-end revaluation: unrealised gains and losses

At each reporting date, IAS 21 requires foreign currency monetary items (cash, receivables, payables, loans) to be retranslated at the closing rate, and the difference goes to profit or loss as an unrealised exchange gain or loss. Non-monetary items such as inventory, prepayments and fixed assets stay at the historical rate.

Example at 31 December 2026, closing rate 1 EUR = 1.12 USD:

| Balance | EUR | Carried at (USD) | At closing rate (USD) | Difference |
|---|---|---|---|---|
| Payable to Rhein Maschinen | 2,000 | 2,180 (booked at 1.09) | 2,240 | 60 loss |
| EUR bank account | 3,000 | 3,270 | 3,360 | 90 gain |
| **Net** | | | | **30 gain** |

The adjusting entries, recorded in base currency:

1. Debit 7103 FX gains and losses 60, credit 2111 Trade payables (Rhein Maschinen) 60.
2. Debit 1105 Bank, foreign currency account 90, credit 7103 FX gains and losses 90.

Ledgeriano does not revalue balances automatically, so you record this as a base currency journal entry before closing. The general ledger shows the euro balances for each account, which is the starting point for the calculation. Some teams reverse the revaluation on the first day of the next period and settle against the original rate; others keep it and measure the next difference from the new carrying amount. Both methods give the same total over time. Add this step to your [year-end closing checklist](https://ledgeriano.com/guides/year-end-closing).

## IAS 21 in brief

IAS 21, The Effects of Changes in Foreign Exchange Rates, sets the rules above. The essentials:

- **Initial recognition**: at the spot rate on the transaction date, or an average rate that approximates it.
- **Monetary items**: retranslated at the closing rate at each reporting date.
- **Non-monetary items at historical cost**: kept at the rate on the transaction date.
- **Exchange differences**: in profit or loss, except those on a net investment in a foreign operation, which go to other comprehensive income in consolidated statements.
- **Translation to a presentation currency**: assets and liabilities at the closing rate, income and expenses at transaction (or average) rates, with the difference in a foreign currency translation reserve in equity (3124 in the IFRS template).

For the full text, see the [IFRS Foundation's IAS 21 page](https://www.ifrs.org/issued-standards/list-of-standards/ias-21-the-effects-of-changes-in-foreign-exchange-rates/). US GAAP (ASC 830) follows very similar principles.

## How Ledgeriano handles multiple currencies

Ledgeriano stores every line in both the transaction currency and the base currency, and every report is produced in base currency. Here is what that means in practice:

- **Entries** can be recorded in any active currency with a stored or manually typed rate; the header shows the currency and rate used.
- **General ledger** lines show the currency code and the foreign debit and credit next to the base amounts and running balance, so you can see how many euros sit in an account.
- **Trial balance, balance sheet, income statement and cash flow** are in base currency, which is what the standards require. See the [financial statements guide](https://ledgeriano.com/guides/financial-statements).
- **Party balances** are in base currency, with the foreign detail available in the party's ledger.
- **Exchange rates** are managed per business, through the interface or the API.

Each business keeps its own base currency, so a group can run a UAE company in AED, a German company in EUR and a holding in USD, and connect them with [intercompany workflows](https://ledgeriano.com/workflows). The [features page](https://ledgeriano.com/features) lists everything else, and the [glossary](https://ledgeriano.com/glossary) defines terms such as functional currency and monetary item.

## Common multi-currency mistakes

1. **Entering only the converted amount.** You lose the foreign balance and cannot reconcile the foreign bank account.
2. **Changing revenue when the rate moves.** Revenue stays at the historical rate; only monetary balances are revalued.
3. **Revaluing non-monetary items.** Inventory and prepayments are not retranslated.
4. **Leaving small base balances on settled invoices.** A customer with EUR 0 but USD 100 outstanding needs a clearing entry.
5. **Missing rates.** Store rates before month end, or entries will be rejected until a rate exists.
6. **Mixing rate sources.** Using the bank's rate one day and the central bank's the next makes FX results noisy.

## FAQ

### What is the difference between base currency and foreign currency?

The base currency is the one your ledger and financial statements are kept in, usually your functional currency. A foreign currency is any other currency a transaction is denominated in, which must be converted to the base currency at an exchange rate.

### Which exchange rate should I use for a foreign currency transaction?

IAS 21 requires the spot rate on the transaction date, and allows an average rate for a period if rates do not fluctuate significantly. Choose one reliable source, such as the central bank's daily rate, and use it consistently.

### How do you calculate a realized FX gain or loss?

Compare the base currency value of the foreign amount when it was recorded with its value when it is settled. For example, EUR 5,000 recorded at 1.10 (USD 5,500) and collected at 1.13 (USD 5,650) gives a realised gain of USD 150.

### What is an unrealized exchange gain or loss?

It is the difference from retranslating open monetary balances, such as receivables, payables and foreign bank accounts, at the closing rate at a reporting date. It is recognised in profit or loss even though no cash has changed hands yet.

### Are inventory and fixed assets revalued for exchange rate changes?

No. They are non-monetary items and stay at the historical rate on the date they were acquired, unless they are measured at fair value, in which case the rate at the fair value date applies.

### Can I record an entry if no exchange rate is stored for that date?

In Ledgeriano the entry uses the latest stored rate on or before its date. If no earlier rate exists, the entry is rejected until you store a rate or type one directly on the entry.

### Do financial statements show foreign currency amounts?

Financial statements are presented in a single currency, normally the base or functional currency. The foreign amounts stay available in the general ledger, which in Ledgeriano shows the currency and foreign debit and credit next to the base amounts.
