# `format_number`

The `format_number` filter formats a number:

    {{ '12.345'|format_number }}

You can pass attributes to tweak the output:

    {# 12.34 #}
    {{ '12.345'|format_number({rounding_mode: 'floor'}) }}

    {# 1000000.0000 #}
    {{ '1000000'|format_number({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_number({grouping_used:true}, locale='en') }}

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

      {# 123. #}
      {{ 123|format_number({decimal_always_shown:true}, locale='en') }}

- `max_integer_digit`:

- `min_integer_digit`:

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

      {# 345.679 #}
      {{ 12345.6789|format_number({max_integer_digit:3, min_integer_digit:2}, locale='en') }}

- `max_fraction_digit`:

- `min_fraction_digit`:

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

      {# 123.46 #}
      {{ 123.456789|format_number({max_fraction_digit:2, min_fraction_digit:1}, locale='en') }}

- `multiplier`: Multiplies the value before formatting:

      {# 123,000 #}
      {{ 123|format_number({multiplier:1000}, locale='en') }}

- `grouping_size`:

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

      {# 1,23,45,678 #}
      {{ 12345678|format_number({grouping_size:3, secondary_grouping_size:2}, locale='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.5 #}
        {{ 123.456|format_number({rounding_mode:'ceiling', rounding_increment:0.05}, locale='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 #}
        {{ 123|format_number({format_width:10, padding_position:'before_suffix'}, locale='en') }}

- `significant_digits_used`:

- `min_significant_digits_used`:

- `max_significant_digits_used`: Control significant digits in formatting:

      {# 123.4568 #}
      {{ 123.456789|format_number({significant_digits_used:true, min_significant_digits_used:4, max_significant_digits_used:7}, locale='en') }}

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

      {# 123 #}
      {{ 123|format_number({lenient_parse:true}, locale='en') }}

Besides plain numbers, the filter can also format numbers in various styles:

    {# 1,234% #}
    {{ '12.345'|format_number(style: 'percent') }}

    {# twelve point three four five #}
    {{ '12.345'|format_number(style: 'spellout') }}

    {# 12 sec. #}
    {{ '12'|format_duration_number }}

The list of supported styles:

- `decimal`:

      {# 1,234.568 #}
      {{ 1234.56789 | format_number(style='decimal', locale='en') }}

- `currency`:

      {# $1,234.56 #}
      {{ 1234.56 | format_number(style='currency', locale='en') }}

- `percent`:

      {# 12% #}
      {{ 0.1234 | format_number(style='percent', locale='en') }}

- `scientific`:

      {# 1.23456789e+3 #}
      {{ 1234.56789 | format_number(style='scientific', locale='en') }}

- `spellout`:

      {# one thousand two hundred thirty-four point five six seven eight nine #}
      {{ 1234.56789 | format_number(style='spellout', locale='en') }}

- `ordinal`:

      {# 1st #}
      {{ 1 | format_number(style='ordinal', locale='en') }}

- `duration`:

      {# 2:30:00 #}
      {{ 9000 | format_number(style='duration', locale='en') }}

As a shortcut, you can use the `format_*_number` filters by replacing `*` with a style:

    {# 1,234% #}
    {{ '12.345'|format_percent_number }}

    {# twelve point three four five #}
    {{ '12.345'|format_spellout_number }}

You can pass attributes to tweak the output:

    {# 12.3% #}
    {{ '0.12345'|format_percent_number({rounding_mode: 'floor', fraction_digit: 1}) }}

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

    {# 12,345 #}
    {{ '12.345'|format_number(locale: 'fr') }}

Note

The `format_number` 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

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

- `attrs`: A map of attributes

- `style`: The style of the number output