如何使用ICU格式化货币值,如果为零则隐藏次要单位

时间:2017-03-29 07:42:18

标签: zend-framework2 number-formatting icu currency-formatting

我正在尝试使用Zend的CurrencyFormat格式化货币值(使用ICU)。基本上它正在工作 - 模式#,##0.#输出正确的格式,如 1.200,00 €

如果只是通过修改模式它是零,是否可以省略次要单位部分?我希望得到以下格式化结果:

  • 1.200 €如果次要单位是“.00”
  • 1.200,34 €如果我们的单位不是“.00”

1 个答案:

答案 0 :(得分:1)

我不认为通过修改模式可以实现它。我的意思是,您可以检查提供的号码是float还是int的类型。如果它是int你可以设置不同的模式,但有更简单的方法(更推荐IMO方式)。
__invoke()方法的第三个参数是$showDecimal。它需要bool值。如果您想要显示小数 - 通过true(它的默认值),否则为false

示例
true - 如果数字是整数

<?php echo $this->currencyFormat(1234, "EUR", true, "de_DE"); ?>

输出:

1.234,00 €

false - 如果数字是浮动

<?php echo $this->currencyFormat(1234, "EUR", false, "de_DE"); ?>

输出:

1.234 €

循环示例

// $prices = [1234, 1234.23, 234, 3456.54]
<?php foreach($prices as $price): ?>
    <?php $showDecimal = is_float($price) ? true : false;
    <p><?php echo $this->currencyFormat(1234, "EUR", $showDecimal, "de_DE"); ?></p>
<?php endforeach; ?>

<强>全球
如果由于某种原因您想要隐藏所有货币/格式的十进制数,您可以使用setShouldShowDecimals()方法:

$this->plugin("currencyformat")->setShouldShowDecimals(false)->setCurrencyCode("USD")->setLocale("en_US");

echo $this->currencyFormat(1234.00);  // "$1,234"

以下是模式http://www.icu-project.org/apiref/icu4c/classDecimalFormat.html#details

的所有可用符号的列表