Skip to content

yepesasecas/currency_formatter

 
 

Repository files navigation

CurrencyFormatter

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.

Examples :

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(1, "huf")
"0,01Ft"

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, 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" => "&#x20AC;",
  "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$"

Installation

As this is available in Hex, the package can be installed as:

  1. Add currency_formatter to your list of dependencies in mix.exs:
def deps do
  [{:currency_formatter, "~> 0.9.0"}]
end

Setup

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"]

Documentation

API documentation is available at https://hexdocs.pm/currency_formatter and http://smeevil.github.io/currency_formatter

About

An Elixir function to format a number to a currency using ISO standards

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Elixir 63.5%
  • HTML 36.5%