我正在尝试使用Zend的CurrencyFormat格式化货币值(使用ICU)。基本上它正在工作 - 模式#,##0.#
输出正确的格式,如
1.200,00 €
。
如果只是通过修改模式它是零,是否可以省略次要单位部分?我希望得到以下格式化结果:
1.200 €
如果次要单位是“.00”1.200,34 €
如果我们的单位不是“.00”答案 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
的所有可用符号的列表