Twig

The flexible, fast, and secure
template engine for PHP

a Symfony Product
Docs Filters format_number
You are reading the documentation for Twig 3.x. Switch to the documentation for Twig 1.x, 2.x.

Questions & Feedback

License

Twig documentation is licensed under the new BSD license.

format_number

The format_number filter formats a number:

1
{{ '12.345'|format_number }}

You can pass attributes to tweak the output:

1
2
3
4
5
{# 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
    2
    {# 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:

    1
    2
    {# 123. #}
    {{ 123|format_number({decimal_always_shown:true}, locale='en') }}
  • max_integer_digit:
  • min_integer_digit:
  • integer_digit: Define constraints on the integer part:

    1
    2
    {# 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:

    1
    2
    {# 123.46 #}
    {{ 123.456789|format_number({max_fraction_digit:2, min_fraction_digit:1}, locale='en') }}
  • multiplier: Multiplies the value before formatting:

    1
    2
    {# 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
    2
    {# 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
    1
    2
    {# 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)
    1
    2
    {# 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:

    1
    2
    {# 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:

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

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

1
2
3
4
5
6
7
8
{# 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
    2
    {# 1,234.568 #}
    {{ 1234.56789 | format_number(style='decimal', locale='en') }}
  • currency:

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

    1
    2
    {# 12% #}
    {{ 0.1234 | format_number(style='percent', locale='en') }}
  • scientific:

    1
    2
    {# 1.23456789e+3 #}
    {{ 1234.56789 | format_number(style='scientific', locale='en') }}
  • spellout:

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

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

    1
    2
    {# 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
2
3
4
5
{# 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:

1
2
{# 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:

1
2
{# 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:

1
$ composer require twig/intl-extra

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

1
$ composer require twig/extra-bundle

Otherwise, add the extension explicitly on the Twig environment:

1
2
3
4
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