【问题标题】:Twig: How to round up?Twig:如何围捕?
【发布时间】:2013-01-16 18:53:14
【问题描述】:

我在树枝上有一个部门。有时,结果可能是小数,我需要总是有一个四舍五入的结果。

例如。

7 / 2 = 3.5

我想拥有

7 / 2 = 4

我知道如何在树枝中使用地板:

7 / 2 | floor = 3

但这是向下取整,而不是向上取整。

我也知道我可以使用 number_format

7 / 2 | number_format(0, '.', ',') = 3

所以这也会占用下一位。

知道如何告诉 twig 取高位数字吗?

这可以在控制器 (Symfony) 中完成,但我正在寻找 twig 版本。

谢谢。

【问题讨论】:

  • 这绝对不应该属于视图。
  • @moonwave99 这是什么原因?
  • @Milos 因为这是逻辑。您只想将视图数据传递给您的模板以显示它,而不是执行任何计算等。
  • @MartinBean,是的,看起来合乎逻辑。但是为什么twig给了我们很多可能性:(计算,逻辑)?
  • 格式化数字返回给客户端肯定属于视图。 OP 没有说明这些数字的来源。

标签: php symfony twig number-formatting


【解决方案1】:

你试过7 // 2吗?

这个documentation page 可能有用。

【讨论】:

  • 从文档中,这也是低位数字:20 // 7 = 2 我需要20 // 2 = 3
  • @Milos 你是对的。我认为,没有集成这样的过滤器,但是您可以编写扩展程序
  • 是的,这是其他人告诉我的。我必须这样做,或者干脆在控制器端制作 ceil。
【解决方案2】:

http://php.net/manual/en/function.ceil.php

使用php的上限功能做你想做的事

【讨论】:

  • 正如我提到的:“这可以在控制器 (Symfony) 中完成”,我知道,但我只是在寻找树枝。
【解决方案3】:

更新

在 1.15.0+ 版本上,round 过滤器可用。

{{ (7 / 2)|round(1, 'ceil') }}

http://twig.sensiolabs.org/doc/filters/round.html


您可以按照here 的描述扩展 twig 并编写自定义函数

它会是这样的:

<?php
// src/Acme/DemoBundle/Twig/AcmeExtension.php
namespace Acme\DemoBundle\Twig;

class AcmeExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            'ceil' => new \Twig_Filter_Method($this, 'ceil'),
        );
    }

    public function ceil($number)
    {
        return ceil($number);
    }

    public function getName()
    {
        return 'acme_extension';
    }
}

所以你可以在 twig 中使用它:

(7 / 2) | ceil

【讨论】:

  • 谢谢,我已经考虑过了,可以作为一个很好的解决方案。由于moonwave99和Martin Bean的建议,我将在控制器端做逻辑,并使用模板仅显示结果。
  • 在 Twig 1.15.0 中添加了圆形过滤器。好的答案在页面底部{{ (7/2)|round(0, 'ceil') }}
【解决方案4】:

不知道它在以前的版本中是怎样的,但在 Symfony 2.2.1 中,您必须在计算周围使用括号(假设您创建了扩展):

(7 / 2)|ceil

显然7 / 2|ceil7 / (2|ceil) 相同,因为它们都给出了相同(错误)的结果,并且只有上述解决方案对我有用。

【讨论】:

    【解决方案5】:

    如果您使用的是 1.12.0 或更高版本,则可以使用三元运算符并执行以下操作:

    {{ ((7 / 2) &gt; (7 // 2)) ? (7 // 2) + 1 : (7 // 2) }}

    它不是那么“优雅”,但它仍然有效。

    【讨论】:

      【解决方案6】:

      http://twig.sensiolabs.org/doc/filters/round.html

      从 Twig 1.15.0 开始,您可以使用“round”过滤器并将“ceil”作为第二个参数传递。解决方案如下所示:

      {{ (7 / 2)|round(0, 'ceil') }}
      

      显示的格式化数字绝对属于视图,而不是控制器。这将被视为显示逻辑 - 这与控制器中的业务逻辑不同,控制器中的业务逻辑应尽可能保持简洁。

      【讨论】:

        【解决方案7】:

        1.15.0 版中的新功能:在 Twig 1.15.0 中添加了圆形过滤器。

        示例:{{ 42.55|round(1, 'ceil') }}

        圆形过滤器有两个可选参数;第一个指定精度(默认为0),第二个指定舍入方法(默认为常用)

        http://twig.sensiolabs.org/doc/filters/round.html

        【讨论】:

          【解决方案8】:

          圆形过滤器将第一个参数作为精度。因此,回答 OP 问题的正确表述是:

          {{ (7 / 2)|round(0, 'ceil') }}
          

          而不是

          {{ (7 / 2)|round(1, 'ceil') }}
          

          http://twig.sensiolabs.org/doc/filters/round.html

          【讨论】:

            猜你喜欢
            • 2014-05-08
            • 1970-01-01
            • 2021-04-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多