PHP: Экспресс номер в словах [дубликаты]

На этот вопрос уже есть ответ:

Есть ли простой способ преобразовать число в слово в PHP? 11 ответов

Есть ли функция, которая будет выражать любое число в словах?

Например

Если число1432, тогда эта функция вернет «Тысячу четыреста тридцать два».

Ответы на вопрос(3)

$sum = 100500;
echo Yii::$app->formatter->asSpellout($sum);

Эти отпечатки прописаны$sum на языке вашего приложения.

Документыссылк

ИспользоватьNumberFormatter class которые в php;)

$f = new NumberFormatter("en", NumberFormatter::SPELLOUT);
echo $f->format(1432);

Это вывело бы «тысячу четыреста тридцать два»

 Chris Wheeler31 дек. 2015 г., 16:35
Если вы хотите более подробный вывод, используйте$f->setTextAttribute(NumberFormatter::DEFAULT_RULESET, "%spellout-numbering-verbose"); который будет выводитьone thousand four hundred and thirty-two
 yitznewton28 дек. 2014 г., 04:12
Это часть внутреннего расширения PECL

я упоминаю здесь два способа, используя Класс NumberFormatter как упомянуто в Martindilling answer (если у вас php версии 5.3.0 или выше, а также расширение PECL 1.0.0 или выше) или с помощью следующей пользовательской функции.

function convertNumberToWord($num = false)
{
    $num = str_replace(array(',', ' '), '' , trim($num));
    if(! $num) {
        return false;
    }
    $num = (int) $num;
    $words = array();
    $list1 = array('', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
        'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'
    );
    $list2 = array('', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety', 'hundred');
    $list3 = array('', 'thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion', 'sextillion', 'septillion',
        'octillion', 'nonillion', 'decillion', 'undecillion', 'duodecillion', 'tredecillion', 'quattuordecillion',
        'quindecillion', 'sexdecillion', 'septendecillion', 'octodecillion', 'novemdecillion', 'vigintillion'
    );
    $num_length = strlen($num);
    $levels = (int) (($num_length + 2) / 3);
    $max_length = $levels * 3;
    $num = substr('00' . $num, -$max_length);
    $num_levels = str_split($num, 3);
    for ($i = 0; $i < count($num_levels); $i++) {
        $levels--;
        $hundreds = (int) ($num_levels[$i] / 100);
        $hundreds = ($hundreds ? ' ' . $list1[$hundreds] . ' hundred' . ' ' : '');
        $tens = (int) ($num_levels[$i] % 100);
        $singles = '';
        if ( $tens < 20 ) {
            $tens = ($tens ? ' ' . $list1[$tens] . ' ' : '' );
        } else {
            $tens = (int)($tens / 10);
            $tens = ' ' . $list2[$tens] . ' ';
            $singles = (int) ($num_levels[$i] % 10);
            $singles = ' ' . $list1[$singles] . ' ';
        }
        $words[] = $hundreds . $tens . $singles . ( ( $levels && ( int ) ( $num_levels[$i] ) ) ? ' ' . $list3[$levels] . ' ' : '' );
    } //end for loop
    $commas = count($words);
    if ($commas > 1) {
        $commas = $commas - 1;
    }
    return implode(' ', $words);
}
 Shahbaz02 мар. 2016 г., 13:59
Если это поможет вам, вы должны проголосовать, но если вы проголосовали, объясните причину! Благодарност
 Onimusha07 нояб. 2015 г., 02:33
Хорошая функция, пока выглядит нормально - заметьте, чтоhundred всегдаhundred и не будет следовать сs
 Shahbaz25 мая 2017 г., 07:16
спасибо @StephenAdelakun за напоминание, но это просто переменная, фактически используемая строка равна сотне.
 Hola15 июн. 2017 г., 07:02
Это не имеет смысла. Как ты согласен?
 Stephen Adelakun24 мая 2017 г., 21:32
Хорошая функция. Но я думаю, вы должны исправить «сотни». @Onimusha также указал на это.

Ваш ответ на вопрос