php Конвертируетчисловтекстовоепредставление
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php Конвертируетчисловтекстовоепредставление相关的知识,希望对你有一定的参考价值。
/**
* Конвертирует число в текстовое представление
* @param $number
* @return string
*/
public static function number2string($number)
{
// обозначаем словарь в виде статической переменной функции, чтобы
// при повторном использовании функции его не определять заново
static $dic = array(
// словарь необходимых чисел
array(
-2 => 'две',
-1 => 'одна',
1 => 'один',
2 => 'два',
3 => 'три',
4 => 'четыре',
5 => 'пять',
6 => 'шесть',
7 => 'семь',
8 => 'восемь',
9 => 'девять',
10 => 'десять',
11 => 'одиннадцать',
12 => 'двенадцать',
13 => 'тринадцать',
14 => 'четырнадцать',
15 => 'пятнадцать',
16 => 'шестнадцать',
17 => 'семнадцать',
18 => 'восемнадцать',
19 => 'девятнадцать',
20 => 'двадцать',
30 => 'тридцать',
40 => 'сорок',
50 => 'пятьдесят',
60 => 'шестьдесят',
70 => 'семьдесят',
80 => 'восемьдесят',
90 => 'девяносто',
100 => 'сто',
200 => 'двести',
300 => 'триста',
400 => 'четыреста',
500 => 'пятьсот',
600 => 'шестьсот',
700 => 'семьсот',
800 => 'восемьсот',
900 => 'девятьсот'
),
// словарь порядков со склонениями для плюрализации
array(
array('рубль', 'рубля', 'рублей'),
array('тысяча', 'тысячи', 'тысяч'),
array('миллион', 'миллиона', 'миллионов'),
array('миллиард', 'миллиарда', 'миллиардов'),
array('триллион', 'триллиона', 'триллионов'),
array('квадриллион', 'квадриллиона', 'квадриллионов'),
// квинтиллион, секстиллион и т.д.
),
// карта плюрализации
array(
2, 0, 1, 1, 1, 2
)
);
// обозначаем переменную в которую будем писать сгенерированный текст
$string = array();
// дополняем число нулями слева до количества цифр кратного трем,
// например 1234, преобразуется в 001234
$number = str_pad($number, ceil(strlen($number) / 3) * 3, 0, STR_PAD_LEFT);
// разбиваем число на части из 3 цифр (порядки) и инвертируем порядок частей,
// т.к. мы не знаем максимальный порядок числа и будем бежать снизу
// единицы, тысячи, миллионы и т.д.
$parts = array_reverse(str_split($number, 3));
// бежим по каждой части
foreach ($parts as $i => $part) {
// если часть не равна нулю, нам надо преобразовать ее в текст
if ($part > 0) {
// обозначаем переменную в которую будем писать составные числа для текущей части
$digits = array();
// если число треххзначное, запоминаем количество сотен
if ($part > 99) {
$digits[] = floor($part / 100) * 100;
}
// если последние 2 цифры не равны нулю, продолжаем искать составные числа
// (данный блок прокомментирую при необходимости)
if ($mod1 = $part % 100) {
$mod2 = $part % 10;
$flag = $i == 1 && $mod1 != 11 && $mod1 != 12 && $mod2 < 3 ? -1 : 1;
if ($mod1 < 20 || !$mod2) {
$digits[] = $flag * $mod1;
} else {
$digits[] = floor($mod1 / 10) * 10;
$digits[] = $flag * $mod2;
}
}
// берем последнее составное число, для плюрализации
$last = abs(end($digits));
// преобразуем все составные числа в слова
foreach ($digits as $j => $digit) {
$digits[$j] = $dic[0][$digit];
}
// добавляем обозначение порядка или валюту
$digits[] = $dic[1][$i][(($last %= 100) > 4 && $last < 20) ? 2 : $dic[2][min($last % 10, 5)]];
// объединяем составные числа в единый текст и добавляем в переменную, которую вернет функция
array_unshift($string, join(' ', $digits));
}
}
// преобразуем переменную в текст и возвращаем из функции, ура!
return join(' ', $string);
}
以上是关于php Конвертируетчисловтекстовоепредставление的主要内容,如果未能解决你的问题,请参考以下文章
text Вслучаееслинеобходимоконтролироватьадреснуюстрокувпутикоторойуказываетсялокализацияпроектавирту
php Имитируетподключениемодулявыгрузкитоваровиз1СУТнасайтБитриксУС
swift Вконечномсчетеярешил,чтоэтопростаярекурсия。 Надругихязыкахрекурсиюяреализовывал。 Пробуюнасвифт
php WooCommerce的Молучаемобщееколичествотовароввкорзинеиихсуммув
text js,jquery - обрежемлишнийтекствкарточкекурсовипоставиммноготочие
php 类别限制разноеколичествопродуктовнакатегориях