php numberformatter 显示零

Posted

技术标签:

【中文标题】php numberformatter 显示零【英文标题】:Php numberformatter displaying zero 【发布时间】:2017-09-30 20:05:16 【问题描述】:

我正在尝试用文字显示发票中的货币。为什么 $total 值显示为零/零/零?

    <td class="no-borders" colspan="2">
            <table class="totals">
                <tfoot>
                    <?php foreach( $this->get_woocommerce_totals() as $key => $total ) : ?>
                    <tr class="<?php echo $key; ?>">
                        <td class="no-borders"></td>

                        <th class="description"><?php echo $total['label']; ?></th>

                        <td class="price"><span class="totals-price"><?php echo $total['value']; ?></span></td>

                        <?php $f = new NumberFormatter("lv", NumberFormatter::SPELLOUT);
                        echo $f->format($total['value']); ?>

                    </tr>
                    <?php endforeach; ?>

【问题讨论】:

如果不为零,$total['value'] 的值是多少? 您的区域设置代码必须是“lv-LV”,并且必须存在于您的系统中。 php.net/manual/en/class.numberformatter.php @Andreas When i 结果是 20.00 欧元。 【参考方案1】:

Numberformatter 需要数字而不是字符串。

20 是一个数字。 €20 是一个字符串。

$f = new NumberFormatter("en", NumberFormatter::SPELLOUT);
echo $f->format("20.00");  // twenty or divdesmit in lv
echo "\n";
echo $f->format("€20.00");  // zero or nulle in lv
echo "\n";
echo $f->format(str_replace("€", "", "€20.00")); // str_replace to remove euro sign

https://3v4l.org/eA6u9

【讨论】:

有没有办法将值转换为 int 以便忽略 € 符号? str_replace 仍然保存欧元符号,可能是因为它的货币不是字符串? 怎么可能是货币?据我所知,没有称为货币的数据类型。你有字符串、整数、浮点数、布尔等等 你能复制粘贴你使用的代码吗?带有 str_replace 的行和(如果不相同)带有 numberformatter 回声的行。也只是为了确定你能var_dump($total['value']); 并将输出复制给我吗?它应该说明“值”是什么数据类型。 @卡拉 var_dumb 以字符串 (118) "€20.00" 的形式出现。我基本上是在尝试为货币添加拼写形式(wordpress 插件 woocomerce)。 @Andreas 第一个文件的代码:3v4l.org/Lhf8G

以上是关于php numberformatter 显示零的主要内容,如果未能解决你的问题,请参考以下文章

NSNumberFormatter 用于 2 个小数位

PHP 'NumberFormatter' 'SPELLOUT' 没有提供所需的英文格式

如何在 SwiftUI 中使用 NumberFormatter?

php 判断小数点后面零不显示 php rtrim

numberformatter(样式货币)删除不起作用

NumberFormatter 分组未按预期工作