Twig 2 - 来自2 number_format的值不正确

问题描述 投票:1回答:1

我正在看到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. 我把它作为一个变量作为测试,我原来已经将它排成行,但我也收到了错误消息:“$ Notice:在C:\ Apache24 \ htdocs \ tekinventory.dev \ vendor \中遇到一个非常好的数值twig \ twig \ lib \ Twig \ Environment.php(372):eval()'代码在198行2.00“ 以及2.00的价值
  3. 如果我从设定的价格线中取出“| number_format(2)”,一切正常,除非我偶尔在最终价格中得到舍入错误(原始问题)

我也看了

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

php twig
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.