# Currencies¶

## Currency¶

The common member functions are as follows:

• name() : returns a string, the name of the currency;

• code() : Returns a string, the ISO4217 code of the currency, usually three uppercase English letters;

• numericCode() : returns an integer, the number corresponding to the ISO4217 code of the currency;

• symbol() : Returns a string, which is a symbol often used to represent the currency in the real world. The dollar is “\$” and the yen is “￥”. It should be noted that this function may return Unicode, which may cause the program to fail in Python;

• fractionSymbol() : Returns a string, which is a symbol often used to represent the smallest unit of the currency in the real world. Like symbol() , this function may return Unicode, which may cause the program to fail in Python;

• fractionsPerUnit() : Returns an integer, the multiple of a unit of currency relative to the smallest unit of the currency, usually 100.

• format() : Returns a string, a “format string” used to format the print result.

• empty() : Returns a Boolean value. If the object is instantiated by a derived class, it returns True ; if the object is instantiated by Currency , it returns False . After all, the currency information in the base class object is “empty.”

• rounding() : Returns a Rounding object, which is the rounding rule of the currency. By default, no rounding is performed.

## Money¶

To make algebraic calculations of currencies in QuantLib, you need to transform the Currency object into a Money object.

`ql.``Money`(currency, value)
`ql.``Money`(value, currency)
```cur = ql.EURCurrency()
money1 = ql.Money(cur, 100)
money2 = ql.Money(100, cur)
```

Money is not usually constructed explicitly, but is generated by multiplying a floating-point number with a Currency object:

```money3 = 100 * cur
money3.value()
```

## ExhangeRate¶

The class in QuantLib that describes exchange rate information between currencies is ExchangeRate , and every two currencies in the Currency system can generate an ExchangeRate object.

ExchangeRate constructor is very fixed and accepts three parameters: ExchangeRate(source, target, rate)

source

a Currency object representing the source currency

target

a Currency object representing the target currency

rate

A floating point number that represents the exchange rate for “source to target”

Common member functions are as follows:

source()

returns the Currency object, which is the source currency;

target()

returns the Currency object, which is the target currency;

rate()

returns a floating point number, ie the exchange rate;

type()

returns the built-in integer constant,

ExchangeRate.Direct

equal to 0, indicating that the exchange rate is constructed directly through the constructor;

ExchangeRate.Derived

equal to 1, indicating that the exchange rate is constructed indirectly through other exchange rate objects;

exchange(amount)

amount is a Money object that converts amount into other currencies of equal value;

chain(r1, r2)

r1 and r2 are ExchangeRate objects. The currency involved must form a triangular relationship. This function will return an ExchangeRate object to complete the missing side of the triangle relationship.

```usd = ql.USDCurrency()
eur = ql.EURCurrency()
usdToeur = ql.ExchangeRate(eur, usd, 1.14)
m_usd = 5 * usd
m_eur = 4.39 * eur
print( 'Converting from USD: ', m_usd, ' = ', usdToeur.exchange(m_usd))
print( 'Converting from EUR: ', m_eur, ' = ', usdToeur.exchange(m_eur))

print(usdToeur.source())
print(usdToeur.target())
print(usdToeur.rate())
```

## ExchangeRateManager¶

```ql.ExchangeRateManager.instance()
```