我有一个四位数的十进制数字,小数位数为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')}}%
但是在某些语言中,%
符号可以在结果之前,在法语中,%
符号之前可以有一个不间断的空格。
您看到我的错误了吗?你有解决办法吗?
答案 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。