This package offers an Elixir function to format a number to a currency using ISO standards.
The JSON iso data has been gracefully borrowed from the ruby money gem.
Formatting cents to currency string
iex> CurrencyFormatter.format(654321, :eur)
"€6.543,21"
iex> CurrencyFormatter.format(654300, :eur)
"€6.543"
iex> CurrencyFormatter.format(654300, :eur, keep_decimals: true)
"€6.543,00"
iex> CurrencyFormatter.format(123456)
"$1,234.56"
iex> CurrencyFormatter.format(654321, "AUD")
"$6,543.21"
iex> CurrencyFormatter.format(123456, disambiguate: true)
"US$1,234.56"
iex> CurrencyFormatter.format(654321, "AUD", disambiguate: true)
"A$6,543.21"
Formatting cents to a currency raw html string
iex> CurrencyFormatter.raw_html_format(123456, "EUR")
~s[<span class="currency-formatter-symbol">€</span><span class="currency-formatter-amount">1.234,56</span>]
"""
Formatting cents to a currency safe(phoenix) html string
iex> CurrencyFormatter.html_format(123456, "EUR")
[
safe: [
60,
"span",
[[32, "class", 61, 34, "currency-formatter-symbol", 34]],
62,
"€",
60,
47,
"span",
62
],
safe: [
60,
"span",
[[32, "class", 61, 34, "currency-formatter-amount", 34]],
62,
"1.234,56",
60,
47,
"span",
62
]
]
Requesting formatting instructions for a currency
iex> CurrencyFormatter.instructions(:EUR)
%{"alternate_symbols" => [], "decimal_mark" => ",", "html_entity" => "€",
"iso_code" => "EUR", "iso_numeric" => "978", "name" => "Euro", "priority" => 2,
"smallest_denomination" => 1, "subunit" => "Cent", "subunit_to_unit" => 100,
"symbol" => "€", "symbol_first" => true, "thousands_separator" => "."}
Get a map of all currencies and their instructions
iex> currencies = CurrencyFormatter.get_currencies()
iex> Enum.count(currencies)
172
iex> currencies["usd"]
%{"alternate_symbols" => ["US$"], "decimal_mark" => ".",
"disambiguate_symbol" => "US$", "html_entity" => "$", "iso_code" => "USD",
"iso_numeric" => "840", "name" => "United States Dollar", "priority" => 1,
"smallest_denomination" => 1, "subunit" => "Cent", "subunit_to_unit" => 100,
"symbol" => "$", "symbol_first" => true, "thousands_separator" => ","}
Getting a list of tuples for use with a select dropdown
iex> CurrencyFormatter.get_currencies_for_select()
["AED", "AFN", "ALL", ...]
iex> CurrencyFormatter.get_currencies_for_select(:names)
[{"AED", "United Arab Emirates Dirham"}, {"AFN", "Afghan Afghani"} , {"ALL", "Albanian Lek"}, ...]
iex> CurrencyFormatter.get_currencies_for_select(:symbols)
[{"AED", "د.إ"}, {"AFN", "؋"}, {"ALL", "L"}, ...]
iex> CurrencyFormatter.get_currencies_for_select(:disambiguate_symbols)
[[{"AED", "د.إ"}, {"AFN", "؋"}, {"ALL", "Lek"}, ...]
Get the disambiguous symbol of a currrency
iex> CurrencyFormatter.symbol(:AUD)
"A$"
As this is available in Hex, the package can be installed as:
- Add currency_formatter to your list of dependencies in
mix.exs
:
def deps do
[{:currency_formatter, "~> 0.4"}]
end
By default you will have 172 currencies available, there are two configuration options that can be set in your app's config.exs
file to limit the number of currencies.
If you would like to limit the list to only include specific currencies, you can configure a whitelist by passing a list of ISO codes to include:
config :currency_formatter, :whitelist, ["EUR", "GBP", "USD"]
To exclude certain currencies from the list, you can configure a blacklist using a list of ISO codes to exclude:
config :currency_formatter, :blacklist, ["XDR", "XAG", "XAU"]
API documentation is available at https://hexdocs.pm/currency_formatter and http://smeevil.github.io/currency_formatter