2

我在我的代码中使用 PHP NumberFormatter 将价格值转换为文字,例如,如果它是 125 卢比,那么它应该是“一百二十五”而不是“一百二十五”。

我尝试了其他示例,例如检查每个数字单位值并替换单词

$numberFormatterClass = new \NumberFormatter("en", \NumberFormatter::SPELLOUT);
echo str_replace('-', ' ', $numberFormatterClass->format($number));

期待 125 =“一百二十五”

4

1 回答 1

3

当数字高于 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”的位置。

这是一个基于单词并使用数组插入“和”的版本:

$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;
于 2019-08-06T07:06:59.207 回答