#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({',': '.'})) %}