Как бы я опустить нулевые значения десятичного числа в числовом формате, используя Twig?

Я хочу отбросить бессмысленные десятичные цифры, например:

14.50   => 14.5
14.0500 => 14.05
14.000  => 14

Я искал, как это сделать, и нашел следующий путь:

{{ number|trim('0')|trim('.') }}

Но единственная проблема с вышеуказанным фильтром — это следующий случай:

0.023 => 023

Кто-нибудь знает, как мне этого добиться?

1

Решение

Вы нигде не упоминаете об этом, но я предполагаю, что ваши «числовые» переменные на самом деле являются строками, в противном случае поведение по умолчанию будет на самом деле тем, что вы ожидаете …

Мое предложение просто бросить эти string переменные в float переменные где-то в вашем PHP-коде, и Twig отобразит их так, как вы ожидаете.

Тем не менее, если вы действительно Нужно сделать это в Twig, вы можете автоматически приводить свои строки к числам, выполняя любые арифметические операции над ними. Смотрите следующий пример:

{% set stringNumber = '14.0500' %}
{% set number = 14.0500 %}

{{ stringNumber }}      {# Prints 14.0500 #}
{{ number }}            {# Prints 14.05 #}
{{ stringNumber + 0 }}  {# Prints 14.05 #}

Полный пример здесь: https://twigfiddle.com/hwl82b

1

Другие решения

Вы можете написать свой собственный фильтр ветки, чтобы справиться с этим.

Взгляни на как создать свое собственное расширение ветки.

В вашем случае фильтр должен выглядеть примерно так:

class NumberExtension extends \Twig_Extension
{
public function getFilters()
{
return [
new \Twig_SimpleFilter('trim_number', [$this, 'trimNumber'])
];
}

/**
* @param $number
* @return int
*/
public function trimNumber($number)
{
if($number < 1){
return 0;
}

return trim($number, '\.0');
}
}

И вы можете использовать фильтр следующим образом:

{{ number | trim_number }}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector