我尝试(使用ICU)格式化与Zend的CurrencyFormat货币值。基本上它工作 - 模式#,##0.#
输出正确的格式,如 1.200,00 €
。如何格式化与ICU货币价值隐藏次要单位如果零
是否有可能离开了轻微的单元部分,如果它通过修改模式是零的时候?我想有以下格式结果:
1.200 €
当未成年人单位为“.00"1.200,34 €
如果minour单位不是” .00"
我尝试(使用ICU)格式化与Zend的CurrencyFormat货币值。基本上它工作 - 模式#,##0.#
输出正确的格式,如 1.200,00 €
。如何格式化与ICU货币价值隐藏次要单位如果零
是否有可能离开了轻微的单元部分,如果它通过修改模式是零的时候?我想有以下格式结果:
1.200 €
当未成年人单位为“.00"1.200,34 €
如果minour单位不是” .00"我不认为这是可能通过修改模式来实现它。我的意思是,你可以检查提供的号码是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
感谢您的回答。我已经用'$ showDecimal'设置做了一些测试,但不幸的是它只是一个“off-for-all-cases”或“on-for-all-cases”。现在我用字符串替换“00”。不好,但至少它可以工作。 – acme
我已编辑我的帖子。我不知道你的数据是怎么样的,但是你不能检查数字是否有像我的“循环例子”中的小数位?我认为这将是更优雅的方式,然后使用'str_replace' – SzymonM
价格定义为次要单位(例如123456最终是$ 1234.56)。所以我想唯一的方法是检查它是否以“00”结尾,并相应地设置“$ showDecimal”,或者最后用空字符串替换“.00”。 – acme