Формат номера ветки преобразует double в int

#twig

#twig

Вопрос:

Я пытаюсь напечатать разницу между двумя числами.

При прямой печати оба числа имеют присвоенное им значение и имеют запятую в качестве десятичного разделителя:

 {{ vals[1] }} --> 7,00
{{ vals[2] }} --> 6,63
 

чтобы действительно иметь возможность вычислять с этими числами, я заменяю , разделитель на a . , используя |number_format (2, '.', ',') . Однако, когда я теперь печатаю эти числа напрямую, я получаю значение int

 {{ vals[1]|number_format (2, '.', ',') }} --> 7.00
{{ vals[2]|number_format (2, '.', ',') }} --> 6.00
 

поэтому, пытаясь вычислить разницу этих значений, я получаю взамен только значения int.

 {% set diff = vals[1]|number_format(2, '.', ',') - vals[2]|number_format(2, '.', ',') %} --> 1.00
 

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

1. почему бы не вычислить разницу раньше, а после этого распечатать результат с помощью number_format ?

2. Я пытаюсь вычислить разницу, прежде чем печатать результат. Сами значения поступают из SQL-запроса данных, и я распечатал их, чтобы узнать, что вызывает проблему и где происходит переключение double на int.

Ответ №1:

Этот пример должен работать:

 {% set val1 = '7,00'  %}
{% set val2 = '6,63'  %}

{% set val1 = val1|replace({',': '.'})  %}
{% set val2 = val2|replace({',': '.'})  %}

 result = {{ (val1 - val2)|round (2) }}

// output: 0.37
 

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

1. спасибо, это то, что я использую сейчас, см. В других ответах.

Ответ №2:

Использование twigs number_format — это прямое сопоставление с number_format (с приведением типов):

 return number_format((float) $number, $decimal, $decimalPoint, $thousandSep);
                     ^^^^^^^
 

Ссылка: https://github.com/twigphp/Twig/blob/3.x/src/Extension/CoreExtension.php#L569


То, что вы предоставляете, — это строка "6,63" , поэтому в конечном итоге get передается в native number_format : 6.00 из-за результата приведения типа.

Ссылка: https://3v4l.org/Md12f


Поэтому, если вы хотите использовать number_format в своих представлениях, обязательно передайте правильные int s или float s. В противном случае используйте значение, являющееся строкой, и используйте методы обработки строк (как в вашем ответе).

Ответ №3:

По какой-то причине мне не удалось установить правильный разделитель запятой с помощью number_format . В итоге я использовал replace вместо:

  {% set diff = (vals[1]|replace({',': '.'}) - vals[2]|replace({',': '.'})) %}