Twig 2 - Неверное значение из 2 number_format - PullRequest
0 голосов
/ 01 сентября 2018

Я вижу странное поведение ветки 2, пытающейся использовать number_format.

Я получаю 3 значения с моего сервера для каждого элемента: стоимость, множитель и количество. Из-за множителя я получал частичные центы при умножении на количество, поэтому я поместил цену в переменную следующим образом:

{% set price = (item.buyPrice * item.markup_mult)|number_format(2) %}

Хорошо, я использую это на следующей строке, и это правильно. Проблема заключается в том, что я пытаюсь использовать значение цены в другой переменной со вторым форматированием:

{% set lineTotal = (price * quantities[item.collection_id][item.item_id])|number_format(2) %}

Таким образом, я получу значение 2,00, потому что мой lineTotal ДОЛЖЕН быть 2400 что-то.

3 На заметку:

  1. Это происходит только в том случае, если цена превышает 1000 долларов, в противном случае все в порядке. Этого не происходит, если цена меньше 1000 долларов, но при умножении количества общая сумма превышает 1000 долларов - я чувствую, что это не может быть совпадением. Может быть, что-то связано с количеством цифр?
  2. У меня в тесте есть переменная, изначально она была в строке, но также я получаю сообщение об ошибке: "$ Примечание. В C: \ Apache24 \ htdocs \ tekinventory.dev \ vendor \ twig \ twig \ lib \ Twig \ Environment.php (372) неверно сформированное числовое значение: eval () в строке 198 2,00 "
    а также значение 2,00
  3. Если я снимаю «| number_format (2)» с линии установленной цены, все работает нормально, за исключением того, что я иногда получаю ошибки округления в окончательной цене (исходная проблема)

Я также прочитал

Это известная ошибка или я что-то не так делаю? Спасибо

1 Ответ

0 голосов
/ 01 сентября 2018

number_format выводит строку, что означает, что вы доверяете автоматическим преобразованиям типов. При использовании number_format по умолчанию автоматически вставляется разделитель тысяч (в США - запятая). Это, вероятно, портит вашу математику и объясняет, почему это проблема только для цен выше $ 999,99.

Вместо использования number_format необходимо использовать round().

$number = 1000.999
echo number_format($number,2); // 1,001.00
echo round($number,2); // 1001

$number = 1000.99
echo number_format($number,2); // 1,000.99
echo round($number,2); // 1000.99
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...