Zend framework2 如果零,如何使用隐藏次要单位格式化货币值

Zend framework2 如果零,如何使用隐藏次要单位格式化货币值,zend-framework2,number-formatting,icu,currency-formatting,Zend Framework2,Number Formatting,Icu,Currency Formatting,我正在尝试使用ICU使用Zend的CurrencyFormat格式化货币值。基本上它是工作的-模式是0。输出正确的格式,如 1200,00欧元 如果次要单位部分为零,是否可以通过修改模式来省略它?我希望获得以下格式化结果: 如果次要单位为0.00,则为1.200欧元 1.200,34欧元,如果minour单位不是0.00 我认为通过修改模式是不可能实现的。我的意思是,你们可以检查提供的数字是浮点型还是int型。若它是int型,你们可以设置不同的模式,但有一种更简单的方法更推荐IMO。 _u_in

我正在尝试使用ICU使用Zend的CurrencyFormat格式化货币值。基本上它是工作的-模式是0。输出正确的格式,如 1200,00欧元

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

如果次要单位为0.00,则为1.200欧元 1.200,34欧元,如果minour单位不是0.00
我认为通过修改模式是不可能实现的。我的意思是,你们可以检查提供的数字是浮点型还是int型。若它是int型,你们可以设置不同的模式,但有一种更简单的方法更推荐IMO。 _u_invoke方法的第三个参数是$showDecimal。它需要布尔值。如果您希望小数可见,请将其默认值传递为true,否则传递为false

范例 true-如果数字为整数

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

1.234欧元

循环示例


这是图案的所有可用符号列表

谢谢您的回答。我已经使用$showDecimal设置进行了一些测试,但不幸的是,对于所有情况,它只是关闭或打开。现在我正在用一个空字符串替换,00。不太好,但至少可以用。我已经编辑了我的帖子。我不知道你们的数据是什么样子的,但你们能不能检查一下numer是否有像我的循环示例中那样的小数位?我认为这会比使用str_替换更优雅。价格是以小单位定义的,例如123456最终是1234.56美元。所以我想唯一的方法是检查它是否以00结尾,并相应地设置$showDecimal,或者只是在结尾用空字符串替换.00。你认为浮动$price/100吗?对:错。123456/100返回float,而123400/100返回int这是真的-但是,似乎仅仅通过定义模式是不可能的:-
<?php echo $this->currencyFormat(1234, "EUR", false, "de_DE"); ?>
// $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; ?>
$this->plugin("currencyformat")->setShouldShowDecimals(false)->setCurrencyCode("USD")->setLocale("en_US");

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