0

我尝试(使用ICU)格式化与Zend的CurrencyFormat货币值。基本上它工作 - 模式#,##0.#输出正确的格式,如 1.200,00 €如何格式化与ICU货币价值隐藏次要单位如果零

是否有可能离开了轻微的单元部分,如果它通过修改模式是零的时候?我想有以下格式结果:

  • 1.200 €当未成年人单位为“.00"
  • 1.200,34 €如果minour单位不是” .00"

回答

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

+0

感谢您的回答。我已经用'$ showDecimal'设置做了一些测试,但不幸的是它只是一个“off-for-all-cases”或“on-for-all-cases”。现在我用字符串替换“00”。不好,但至少它可以工作。 – acme

+0

我已编辑我的帖子。我不知道你的数据是怎么样的,但是你不能检查数字是否有像我的“循环例子”中的小数位?我认为这将是更优雅的方式,然后使用'str_replace' – SzymonM

+0

价格定义为次要单位(例如123456最终是$ 1234.56)。所以我想唯一的方法是检查它是否以“00”结尾,并相应地设置“$ showDecimal”,或者最后用空字符串替换“.00”。 – acme