【问题标题】:Twig 2 - Incorrect value from 2 number_formatTwig 2 - 来自 2 number_format 的值不正确
【发布时间】:2018-09-01 00:59:46
【问题描述】:

我看到 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)”从设定的价格线中取出,一切正常,只是偶尔会在最终价格中出现舍入错误(原始问题)

我也读过

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

【问题讨论】:

    标签: php twig


    【解决方案1】:

    number_format 输出一个字符串,这意味着您信任自动类型转换。默认情况下,当您使用 number_format 时,它会自动插入千位分隔符(在美国,逗号)。这可能会打乱您的数学运算,并解释了为什么只有 999.99 美元以上的价格才有问题。

    您需要使用round(),而不是使用number_format。

    $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
    

    【讨论】:

    • 啊,如果我在初始价格上使用 round ,然后在价格和总计行上使用 number_format 作为实际输出,这确实有效。我没想过要真正查看 PHP 文档中的 number_format,因为我认为 Twig 会更改或添加足够的行为以使它们变得太不同。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多