如何隐藏twig中的localizedcurrency过滤器的小数部分

时间:2016-03-07 16:47:47

标签: php symfony twig intl

我使用过滤器localizedcurrency来格式化多语言的价格 网站。由于这是房屋的价格,我不需要小数部分。

除了使用replace过滤器之外,我无法找到隐藏它的方法。我想知道是否有更好的方法,因为使用replace意味着我必须用英语替换一个点和法语中的逗号等等......

我也不能使用某种形式的substr,因为美元符号可以在值之前或之后。

我尝试将int而不是float传递给过滤器,但它只是默认为.00

谢谢!

1 个答案:

答案 0 :(得分:4)

使用money_format

    setlocale(LC_MONETARY, 'en_US');
    echo money_format('%.0i', $number);

.0中的'%.0i'是右侧精度。

您可能需要在树枝扩展名中添加过滤器。如果您需要帮助,请告诉我。

编辑:

展望国际/地区扩展,它似乎从formatCurrency类调用NumberFormatter方法,后者又调用私有roundCurrency,最终确实如此:

private function roundCurrency($value, $currency)
{
    $fractionDigits = Intl::getCurrencyBundle()->getFractionDigits($currency);

    // ...

    // Round with the formatter rounding mode
    $value = $this->round($value, $fractionDigits);

    // ...
}

但是试图追踪$fractionDigits值的来源将会在层次结构中再增加2个类,并成为神秘主义者:

public function getFractionDigits($currency)
{
    try {
        return $this->reader->readEntry($this->path, 'meta', array('Meta', $currency, static::INDEX_FRACTION_DIGITS));
    } catch (MissingResourceException $e) {
        return $this->reader->readEntry($this->path, 'meta', array('Meta', 'DEFAULT', static::INDEX_FRACTION_DIGITS));
    }
}

所以它可能可以让你当前的扩展来进行舍入,但我可能会使用我自己的过滤器,因为它似乎更容易,我可以动态指定精度。< / p>