PHP 'NumberFormatter' 'SPELLOUT' 没有提供所需的英文格式
Posted
技术标签:
【中文标题】PHP \'NumberFormatter\' \'SPELLOUT\' 没有提供所需的英文格式【英文标题】:PHP 'NumberFormatter' 'SPELLOUT' is not providing required format in englishPHP 'NumberFormatter' 'SPELLOUT' 没有提供所需的英文格式 【发布时间】:2019-08-06 06:39:03 【问题描述】:我在我的代码中使用 php NumberFormatter 将价格值转换为文字 例如,如果是 125 卢比,那么应该是“一百二十五”而不是“一百二十五”。
我已经尝试过其他示例,例如检查每个数字单位值并替换单词
$numberFormatterClass = new \NumberFormatter("en", \NumberFormatter::SPELLOUT);
echo str_replace('-', ' ', $numberFormatterClass->format($number));
期望 125 = “一百二十五”
【问题讨论】:
@KIKOSoftware,不检查十进制值。而不是寻找我提到的格式。 好的,我明白了,问题是什么。 为什么是 str_replace?我尝试了没有代码,它也是一样的。你只想要绝对值吗? 确保您已经安装了 php-intl 包(php5-intl、php7.0-intl 等) 【参考方案1】:当数字大于 99 时,您只能生成最后两位数字的拼写。然后你就知道在哪里插入“和”了。在代码中:
$number = 125;
$numberFormatter = new \NumberFormatter('en', \NumberFormatter::SPELLOUT);
$fullSpellout = str_replace('-', ' ', $numberFormatter->format($number));
if ($number > 100)
$lastTwoSpellout = str_replace('-', ' ', $numberFormatter->format(substr($number, -2)));
$hunderdsLength = strlen($fullSpellout) - strlen($lastTwoSpellout);
$fullSpellout = substr($fullSpellout, 0, $hunderdsLength) . 'and ' . $lastTwoSpellout;
echo $fullSpellout;
这个输出:
one hundred and twenty five
这当然不是唯一可能的解决方案。插入“and”的方法有很多,如果最后两位数字总是生成两个单词,您也可以使用它来检测插入“and”的位置。
这是一个基于单词并使用数组插入'and'的版本:
$number = 125;
$numberFormatter = new \NumberFormatter('en', \NumberFormatter::SPELLOUT);
$spellout = str_replace('-', ' ', $numberFormatter->format($number));
if ($number > 100)
$words = explode(' ', $spellout);
array_splice($words, -2, 0, ['and']);
$spellout = implode(' ', $words);
echo $spellout;
【讨论】:
确保您已经安装了 php-intl 包(php5-intl、php7.0-intl 等) 我认为这行不通。 NumberFormatter 不使用减号,而是在数字之间使用 utf8 软连字符。所以str_replace('-', '', $str);
将不起作用。而是做preg_replace('~\x00AD~u', '', $str);
工作。不确定这是否是语言环境的问题。以上是关于PHP 'NumberFormatter' 'SPELLOUT' 没有提供所需的英文格式的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中使用 NumberFormatter?