如何使用 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。
我有一个 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 模板中使用它,则必须
查看更多示例here。