Twig: Как округлить?
У меня есть разделение на ветке. Иногда результат может быть с десятичными знаками, и мне нужно всегда иметь округленный результат.
Ex.
7 / 2 = 3.5
Я хотел бы иметь
7 / 2 = 4
Я знаю, как использовать пол в веточке:
7 / 2 | floor = 3
Но это округление до нижней цифры, а не к верхней.
Я также знаю, что могу использовать number_format
7 / 2 | number_format(0, '.', ',') = 3
Таким образом, это также примет нижнюю цифру.
Любая идея о том, как сказать ветку взять верхнюю цифру?
Это можно сделать в контроллере (Symfony), но я ищу версию твига.
Спасибо.
Ответы
Ответ 1
Обновить
В версиях 1.15. 0+ доступен round
фильтр.
{{ (7 / 2)|round(1, 'ceil') }}
http://twig.sensiolabs.org/doc/filters/round.html
Вы можете расширить веточку и написать свои пользовательские функции, как описано здесь
И это будет примерно так:
<?php
// src/Acme/DemoBundle/Twig/AcmeExtension.php
namespace Acme\DemoBundle\Twig;
class AcmeExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
'ceil' => new \Twig_Filter_Method($this, 'ceil'),
);
}
public function ceil($number)
{
return ceil($number);
}
public function getName()
{
return 'acme_extension';
}
}
Так что вы можете использовать его в веточку:
7 / 2 | ceil
Ответ 2
Новое в версии 1.15.0: круглый фильтр был добавлен в Twig 1.15.0.
Пример: {{ 42.55|round(1, 'ceil') }}
Круглый фильтр принимает два необязательных аргумента; первая задает точность (по умолчанию 0), а второй метод округления (по умолчанию является общим)
http://twig.sensiolabs.org/doc/filters/round.html
Ответ 3
Не знаю, как это происходит в предыдущих версиях, но в Symfony 2.2.1 вам нужно использовать круглые скобки вокруг вашего расчета (при условии, что вы создали расширение):
(7 / 2)|ceil
По-видимому, 7 / 2|ceil
совпадает с 7 / (2|ceil)
, поскольку оба они дали одинаковый (неверный) результат, и только мое решение для меня работало.
Ответ 4
Вы пробовали 7 // 2
?
Эта страница может быть полезна.
Ответ 5
http://twig.sensiolabs.org/doc/filters/round.html
Начиная с Twig 1.15.0, вы можете использовать фильтр "round" и передать "ceil" в качестве второго параметра. Решение будет выглядеть так:
{{ (7 / 2)|round(0, 'ceil') }}
Номера форматирования для отображения определенно принадлежат к виду, а не к контроллеру. Это будет считаться логикой отображения, которая отличается от бизнес-логики контроллеров, которые должны быть максимально чистыми как минимум.
Ответ 6
Если вы используете версию 1.12.0 или новее, вы можете использовать тернарный оператор и сделать что-то вроде этого:
{{ ((7 / 2) > (7 // 2)) ? (7 // 2) + 1 : (7 // 2) }}
Это не так "элегантно", но все равно работает.
Ответ 7
Круглый фильтр принимает первый аргумент в качестве точности. Таким образом, правильная формулировка для ответа на вопрос ОП будет такой:
{{ (7 / 2)|round(0, 'ceil') }}
скорее, чем
{{ (7 / 2)|round(1, 'ceil') }}
http://twig.sensiolabs.org/doc/filters/round.html
Ответ 8
http://php.net/manual/en/function.ceil.php
используйте функцию потолка php, чтобы делать то, что вы хотите