GnuCash User Manual
<<< Previous |  | Next >>>

# Currency Handling and Double Entry Bookkeeping

A Double Entry bookkeeping system stores both values, and requires that all transactions balance, as described in the Rule of Double Entry Accounting.

When we introduce the notion of having multiple currencies, or stocks that may vary in price, the identities get a little more complicated, and we introduce the following formulae:

- value=exch-rate*amount (for currency accounts)

- value=price*num-shares (for stocks/mutual-funds)

Thus, buying a widget in Japan (JPY) and using US Dollars (USD) to pay for it would appear thus:

- SpendAcct: (an ordinary bank/cash acct valued in USD) ``

  Date xfer from memo cost 1/5/99 [JPYAcct] Buy widget $1.00

- JPYAcct: (a currency trading account valued in yen) ``

  Date xfer from memo purchase rate 1/5/99 [SpendAcct] Buy widget Y150 0.00667

The engine links together all three of these values `(1.0, 150, 0.00667)` permanently and makes it impossible to change one without changing another, so that the grand total is always zero, thereby guaranteeing satisfaction of the rule of double entry accounting.

# How to set up a foreign-currency account

All of the above may sound straightforward, but you may get stumped when you first try to represent some foreign money. Let's demonstrate how you'd go about setting up an account to represent, say, French Francs.

Let's say you have an account that holds cash in US dollars, and it has $1,000 in it. You want to buy about $100 worth of Francs, and naturally you'd like to represent those Francs in their own account. Here's what you need to do:

- Create a new account (name it "Francs") of type Cash, with a currency of FRF (that's the ISO code for French Francs; see ISO Currency Codes, below).

- Create another account (name it "Trading"), of type Currency, with a currency of USD, and a security of FRF. This account will represent trades between the two currencies, or to be more precise, purchases of Francs with dollars.

- Now open the "Trading" account, and enter a transaction that transfers from your cash account. Put 555 in the "Debit" column, and 0.18 in the Price column. (GnuCash will offer to calculate the Value for you; let it do so.) You've now bought 555 Francs for $0.18 apiece.

- Transfer the 555 Francs that are now in your trading account into the "Francs" account (by putting "555" in the "Debit" column). Note that you could not have transferred anything directly from cash to Francs (try it); those two accounts do not have a currency in common.

- Note that your "Trading" account now is a bit screwed up -- the last transaction, transferring 555 francs to your "Francs" account, didn't record the price of those francs. You can change the price from 1 to 0.18 to make the balance in the "Trading" account come out to zero.

Here's what it all looks like once you're done:

<<< Previous | Home | Next >>>
Common Report Options |  | ISO Currency Codes