Я пытаюсь напечатать разницу между двумя числами.
При прямой печати оба числа имеют назначенное им значение и имеют запятую в качестве десятичного разделителя:
{{ vals[1] }} --> 7,00
{{ vals[2] }} --> 6,63
чтобы на самом деле иметь возможность вычислять эти числа, я заменяю разделитель ,
на .
, используя |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
Я пытаюсь рассчитать разницу, прежде чем распечатать результат. Сами значения поступают из запроса данных sql, и я распечатал их, чтобы увидеть, что вызывает проблему и где происходит переключение double на int.
По какой-то причине мне не удалось установить правильный разделитель запятой с помощью number_format
. Вместо этого я использовал replace
:
{% set diff = (vals[1]|replace({',': '.'}) - vals[2]|replace({',': '.'})) %}
Использование 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"
, поэтому в конечном итоге то, что передается нативному number_format
, это: 6.00
из-за результата приведения типа.
Ссылка: https://3v4l.org/Md12f
Поэтому, если вы хотите использовать number_format
в своих представлениях, не забудьте передать правильные int
s или float
s. В противном случае используйте значение, являющееся строкой, и используйте методы манипулирования строками (как в вашем ответе).
Этот пример должен работать:
{% set val1 = '7,00' %}
{% set val2 = '6,63' %}
{% set val1 = val1|replace({',': '.'}) %}
{% set val2 = val2|replace({',': '.'}) %}
result = {{ (val1 - val2)|round (2) }}
// output: 0.37
спасибо, это то, что я использую сейчас, см. в других ответах.
почему бы не рассчитать разницу раньше, а после этого распечатать результат с помощью number_format ?