GnuCash can deal with multiple currencies. However, its behavior when setting currency exchange rates is somewhat obscure and had me spend literally hours to figure out how to get it under control a couple of times.
The use case. Account A is in USD currency, account B is in UAH currency. You need to transfer funds from A to B, which involves currency exchange rate.
When you do this the very first time, you enter Description of the transaction, specify the account B to transfer funds to, and key in Debit/Withdraw value of say 150USD and then hit Enter key, GnuCash then will present you with an exchange rate editor window where you should be able to enter the exchange rate for this transaction.
As it often happens, many transactions are repetitive, and luckily GnuCash helps making these records fast by offering you a history autocompletion function, much like one found in LibreOffice and Bash/Linux/UNIX terminal.
So, typically a user would quickly create another new record in a ledger for account A, specify a different amount of Debit/Withdrawal this time and find out that the resulting value in account B is wrong.
If you do a RMB click on the transaction entry in a ledger for account A and choose “Edit Exchange Rate” you’ll see that the Exchange Rate for Currency Transfer is already set to some value, apparently most recently used.
Changing that Exchange Rate value would have no effect on the transaction in question. Which is really baffling and can have a user running in circles for a long time.
The trick is to avoid autocompletion when creating a new transaction entry. This means a user needs to type Description in full without hitting Tab key ever to autocomplete this field. Eventually, once you finished filling out the Description field, you may hit Tab key, and it will automatically choose target account to transfer funds to and set a value of Debit/Withdrawal apparently used the most recent time, as well as the Currency Transfer Exchange Rate. However, this time it should be editable.
It’s pretty weird as it is, but to make things even more complicated it would seem that you have only one shot at editing the Currency Transfer Exchange Rate. So, if you entered one and made a mistake you’d need to delete entire transaction and start over again.
Maybe I don’t understand GnuCash, but I’m not the only one. I’d be happy to learn a better way to take this under control, but thus far I know not of any other.