# `format_currency`

The `format_currency` filter formats a number as a currency:

    {# €1,000,000.00 #}
    {{ '1000000'|format_currency('EUR') }}

You can pass attributes to tweak the output:

    {# €12.34 #}
    {{ '12.345'|format_currency('EUR', {rounding_mode: 'floor'}) }}

    {# €1,000,000.0000 #}
    {{ '1000000'|format_currency('EUR', {fraction_digit: 4}) }}

The list of supported options:

- `grouping_used`: Specifies whether to use grouping separator for thousands:

      {# €1,234,567.89 #}
      {{ 1234567.89 | format_currency('EUR', {grouping_used:true}, 'en') }}

- `decimal_always_shown`: Specifies whether to always show the decimal part, even if it’s zero:

      {# €123.00 #}
      {{ 123 | format_currency('EUR', {decimal_always_shown:true}, 'en') }}

- `max_integer_digit`:

- `min_integer_digit`:

- `integer_digit`: Define constraints on the integer part:

      {# €345.68 #}
      {{ 12345.6789 | format_currency('EUR', {max_integer_digit:3, min_integer_digit:2}, 'en') }}

- `max_fraction_digit`:

- `min_fraction_digit`:

- `fraction_digit`: Define constraints on the fraction part:

      {# €123.46 #}
      {{ 123.456789 | format_currency('EUR', {max_fraction_digit:2, min_fraction_digit:1}, 'en') }}

- `multiplier`: Multiplies the value before formatting:

      {# €123,000.00 #}
      {{ 123 | format_currency('EUR', {multiplier:1000}, 'en') }}

- `grouping_size`:

- `secondary_grouping_size`: Set the size of the primary and secondary grouping separators:

      {# €1,23,45,678.00 #}
      {{ 12345678 | format_currency('EUR', {grouping_size:3, secondary_grouping_size:2}, 'en') }}

- `rounding_mode`:

- `rounding_increment`: Control rounding behavior, here is a list of all rounding_mode available:

  > - `ceil`: Ceiling rounding

  > - `floor`: Floor rounding

  > - `down`: Rounding towards zero

  > - `up`: Rounding away from zero

  > - `half_even`: Round halves to the nearest even integer

  > - `half_up`: Round halves up

  > - `half_down`: Round halves down

  >     {# €123.50 #}
  >     {{ 123.456 | format_currency('EUR', {rounding_mode:'ceiling', rounding_increment:0.05}, 'en') }}

- `format_width`:

- `padding_position`: Set width and padding for the formatted number, here is a list of all padding_position available:

  > - `before_prefix`: Pad before the currency symbol

  > - `after_prefix`: Pad after the currency symbol

  > - `before_suffix`: Pad before the suffix (currency symbol)

  > - `after_suffix`: Pad after the suffix (currency symbol)

  >     {# €123.00 #}
  >     {{ 123 | format_currency('EUR', {format_width:10, padding_position:'before_suffix'}, 'en') }}

- `significant_digits_used`:

- `min_significant_digits_used`:

- `max_significant_digits_used`: Control significant digits in formatting:

      {# €123.4568 #}
      {{ 123.456789 | format_currency('EUR', {significant_digits_used:true, min_significant_digits_used:4, max_significant_digits_used:7}, 'en') }}

- `lenient_parse`: If true, allows lenient parsing of the input:

      {# €123.00 #}
      {{ 123 | format_currency('EUR', {lenient_parse:true}, 'en') }}

By default, the filter uses the current locale. You can pass it explicitly:

    {# 1.000.000,00 € #}
    {{ '1000000'|format_currency('EUR', locale: 'de') }}

Note

The `format_currency` filter is part of the `IntlExtension` which is not installed by default. Install it first:

    $ composer require twig/intl-extra

Then, on Symfony projects, install the `twig/extra-bundle`:

    $ composer require twig/extra-bundle

Otherwise, add the extension explicitly on the Twig environment:

    use Twig\Extra\Intl\IntlExtension;

    $twig = new \Twig\Environment(...);
    $twig->addExtension(new IntlExtension());

## Arguments

- `currency`: The currency (ISO 4217 code)

- `attrs`: A map of attributes

- `locale`: The locale code as defined in RFC 5646

Note

Internally, Twig uses the PHP NumberFormatter::formatCurrency function.