如何使用Twig的Intl扩展名提高百分比格式的小数精度?

时间:2019-11-01 16:54:13

标签: php symfony twig intl twig-extension

我有一个四位数的十进制数字,小数位数为4。(最大为0.9999,最小为0.0000)

我正在使用Twig及其intl extension。当我要呈现百分比数字时,小数点会四舍五入。

{% set decimal = 0.0850 %}
{{ decimal|localizednumber('decimal','double','fr-fr') }} //WILL OUTPUT "0,085"
{{ decimal|localizednumber('decimal','double','zh-cn') }} //WILL OUTPUT "0.085"
{{ decimal|localizednumber('decimal','double','ar-bh') }} //WILL OUTPUT "٠٫٠٨٥"
{{ decimal|localizednumber('percent','double','fr-fr') }} //WILL OUTPUT "8 %"
{{ decimal|localizednumber('percent','double','zh-cn') }} //WILL OUTPUT "8%"
{{ decimal|localizednumber('percent','double','ar-bh') }} //WILL OUTPUT "% ٨"

我希望看到8,5 %的法语,8.5%的中文和% ٨٫٥的阿拉伯语。

我尝试添加double参数,但它不会改变精度。

当我使用Symfony时,我试图用数字格式声明2个小数:

<!-- lang-yml -->
#config/twig.yaml
twig:
    #...
    number_format:
        decimals: 2

似乎Intl扩展名将覆盖这些设置。

我知道我可以做类似的事情

{{ (decimal*100)|localizednumber('decimal','double')}}% 

但是在某些语言中,%符号可以在结果之前,在法语中,%符号之前可以有一个不间断的空格。

您看到我的错误了吗?你有解决办法吗?

1 个答案:

答案 0 :(得分:1)

不能直接使用您正在使用的Twig Intl扩展名。

它没有参数来设置精度,它只是使用您选择的格式样式实例化NumberFormatter,并将使用它来format()来设置您的值。

检查代码here


还有另一个扩展程序,它具有更多选项:https://github.com/twigphp/intl-extra

使用此选项,您可以指定NumberFormatter支持的所有属性,如here所示。

您将像这样使用它:

{% set decimal = 0.0850 %}
{{ decimal|format_number(style='percent', locale='fr', {min_fraction_digit: 1}) }}

或者,您可以利用NumberFormatter 来编写自己的扩展名。

NumberFormatter::PERCENT默认使用的模式是#,##0 %,其中不包括小数精度。您可以在these rules之后定义自己的模式。

或者直接调用setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, 1)来指定您感兴趣的最小十进制数。

例如:

$formatter->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, 1);

最终的实现方式取决于您,如果您需要在Twig模板中使用它,则必须create your own(Symfony官方docs)。

查看更多示例here