Twig 2-2 number_format

时间:2018-09-01 00:59:47

标签: php twig

我看到树枝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)中遇到的格式不正确的数值:第198行的eval()代码 2.00“
    以及值2.00
  3. 如果我将“ | number_format(2)”从设置的价格行中剔除,则一切正常,除了我偶尔会在最终价格中出现四舍五入错误(原始问题)

我也阅读了

这是一个已知的错误,还是我做错了什么?谢谢

1 个答案:

答案 0 :(得分:2)

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