Как увеличить десятичную точность в процентном формате, используя расширение Twig Intl? - PullRequest
3 голосов
/ 01 ноября 2019

У меня есть десятичное число с 4 цифрами и шкалой 4. (Макс. 0,9999 и мин. 0,0000)

Я использую Twig и его intl расширение . Когда я хочу отобразить процентное число, десятичные числа округляются.

{% set decimal = 0.0850 %}
{{ decimal|localizednumber('decimal','double','fr-fr') }} //WILL OUTPUT "0,085"
{{ decimal|localizednumber('decimal','double','zh-cn') }} //WILL OUTPUT "0.085"
{{ decimal|localizednumber('decimal','double','ar-bh') }} //WILL OUTPUT "٠٫٠٨٥"
{{ decimal|localizednumber('percent','double','fr-fr') }} //WILL OUTPUT "8 %"
{{ decimal|localizednumber('percent','double','zh-cn') }} //WILL OUTPUT "8%"
{{ decimal|localizednumber('percent','double','ar-bh') }} //WILL OUTPUT "% ٨"

Я хотел бы видеть 8,5 % на французском, 8.5% на китайском и % ٨٫٥ на арабском.

Я пытался добавить параметр double, но он не меняет точность.

Поскольку я использую Symfony, я пытался объявить 2 десятичных знака в числовом формате:

<!-- lang-yml -->
#config/twig.yaml
twig:
    #...
    number_format:
        decimals: 2

Кажется, что расширение Intl переопределяет эти настройки.

Я знаю, что могу сделать что-то вроде

{{ (decimal*100)|localizednumber('decimal','double')}}% 

Но символ % может быть до результата на некоторых языках, вФранцузский, перед символом % стоит неразрывный пробел.

Вы видите мою ошибку? У вас есть решение?

1 Ответ

1 голос
/ 02 ноября 2019

Невозможно сделать напрямую с используемым расширением Twig Intl.

У него нет параметра для установки точности, он просто создает экземпляр NumberFormatter с помощьюстиль форматирования по вашему выбору, и он будет использоваться для format() вашего значения.

Проверьте код здесь .


Есть еще одно расширениекоторый имеет больше опций: https://github.com/twigphp/intl-extra

С этим вы можете указать все атрибуты, поддерживаемые NumberFormatter, как показано здесь .

Вы бы использовали егонапример:

{% set decimal = 0.0850 %}
{{ decimal|format_number(style='percent', locale='fr', {min_fraction_digit: 1}) }}

В качестве альтернативы, вы можете написать свое собственное расширение, используя NumberFormatter.

Шаблон, который NumberFormatter::PERCENT использует дляпо умолчанию #,##0 %, которая не включает десятичную точность. Вы можете определить свой собственный шаблон, следуя этим правилам , так оно и есть.

Или просто позвоните setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, 1), чтобы указать минимальное количество интересующих вас десятичных чисел.

Например:

$formatter->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, 1);

Окончательная реализация зависит от вас, и если вам нужно использовать ее в шаблоне Twig, вам нужно будет создать свой собственный (Официальный Symfony docs ).

Другие примеры здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...