php-如何在树枝中隐藏localizedcurrency过滤器的小数部分

我正在使用过滤器localizedcurrency来设置多语言的价格格式
网站.由于这是房屋价格,因此我不需要小数部分.

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

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

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

谢谢!

解决方法:

使用money_format

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

‘%.0i’中的.0是右侧精度.

您可能需要在细枝扩展中添加过滤器.让我知道您是否需要帮助.

编辑:

查看国际扩展,似乎从NumberFormatter类调用formatCurrency方法,该方法又调用了一个专用的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));
    }
}

因此,有可能让您当前的扩展名进行舍入,但我可能会使用自己的过滤器,因为这似乎更容易,而且我可以随时指定精度.

上一篇:如何修复阻止下拉列表工作的JavaScript函数


下一篇:PHP intl可以将公历日期转换为其他日历类型