Как отформатировать значение из KG в t с помощью Twig и Symfony2

#symfony #twig

#symfony #twig

Вопрос:

Я создаю систему, которая обрабатывает веса материалов, собираемых компанией. Из-за огромного количества собранных материалов клиент желает, чтобы веса отображались в тоннах (t), а не в килограммах (kg).

Однако данные, которые вводятся через csv, содержат все материалы в отдельных строках, все записанные в KG. Я могу сложить все KG вместе для отображения всех материалов, но я не уверен, как я могу отформатировать значение из KG в t.

Например, отображаются 10 материалов весом по 100 кг каждый. Всего получается 1000 кг, но я хочу отобразить его в тоннах, что будет либо 1 т, либо 1,0 т.

Как я могу этого добиться, используя twig и Symfony2?

Ответ №1:

Лучший способ сделать это — написать расширение для Twig, это просто, и таким образом вы сможете использовать его везде.

Как написать пользовательское расширение Twig

После расширения вы можете записать его как:

 {{ KG|ton_format }}
  

Комментарии:

1. Это имело больше смысла, поэтому я использовал этот метод. Приветствия!

Ответ №2:

вы могли бы просто сделать это на symfony / php

если вам нужно округлить результат, используйте http://www.php.net/manual/de/function.round.php

   $items = $fooRepository->findYourStuff();
  $overallWeight=0;     
  for($items as $item){
      $overallWeight  = $item->getWeightInKilo();
  }
  $metricTons= $overallWeight/1000;
  

вы могли бы сделать то же самое в twig, но я бы убрал логику подальше от просмотра.

еще лучше было бы добавить в ваш entityClass метод, подобный :

  public function getWeightInTons(){
     return ( $this->getWeightInKilos() / 1000 );
 }
  

затем в twig вы могли бы вызвать

 {{ item.getWeightInTons }}
  

Ответ №3:

Плюс ответы ниже, вы также можете попробовать:

 {% set total = 0 %}
{% for item in myStuff %}
   {% set total = total   item.getWeight %}
{% endfor %}
<span>Total: </span>{{ (total/1000)|round(2, 'floor') }}
  

Использование floor или ceil и степень точности зависят от вас

Ответ №4:

Если для переменной задан общий вес в килограммах, вы также можете использовать фильтры number_format и format :

 {% set weight_in_kilos = 24450 %}

{{ (weight_in_kilos/1000)|number_format(1) }}t
{{ '%.1ft'|format(weight_in_kilos/1000) }}
  

Приведенный выше вывод:

 24.5t
24.4t
  

Обратите внимание, как два фильтра по-разному обрабатывают округление: number_format округляет математически, тогда как format просто сокращает вывод, чтобы получить указанное количество десятичных знаков.