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

How to increase decimal precision on percentage format using Twig's Intl extension?

我有一个 4 位小数,小数位数为 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

国际扩展似乎覆盖了这些设置。

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

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

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

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

无法直接使用您正在使用的 Twig Intl 扩展完成。

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

检查代码


还有一个扩展程序确实有更多选项: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 模板中使用它,则必须 (official Symfony docs).

查看更多示例here