Есть таблица с числами напр.
150
75
137
...
Задача стоит что бы эти числа были виде слов. напр.
- Сто пятьдесят
- Семьдесят Пять
- Сто Тридцать Семь
...
т.е. если быть точнее, бугалтерю надо выписывать чек, и требовательно что бы и словами была сумма написанно.
Как научиь PHP этому? Составлять массив всех чисел и так подставлять что-ли Это же может быть до 10000 значении в массиве. умаю есть готовое решение.
+
Мне надо не на русском яз. что бы было бы, но думаю потом перепишу есть есть готовое решение на русс.
спс.Ув.
P.S. Нашёл это http://www[dot]internet-technologies[dot][dot][dot]/article_17[dot]html , на сколько правильное решение?
1. pantela - 10 Августа, 2013 - 02:13:02 - перейти к сообщению
2. DlTA - 10 Августа, 2013 - 02:55:14 - перейти к сообщению
pantela пишет:
там в коментах все написано, читайте
на сколько правильное решение?
3. pantela - 16 Мая, 2014 - 17:21:26 - перейти к сообщению
Вот начал разберать класс, вроде раборает, но десятичные, сотые... числа не переводить
Ввожу 50.50
Выводит:
Пятьдесят рублей 50 копеек
Пятьдесят метров 50 сантиметров
+ не работает с UTF-8 выводить в начале слов ��, как я понял это функци не поддрежывает UTF-8
Как дописать?
Ввожу 50.50
Выводит:
Пятьдесят рублей 50 копеек
Пятьдесят метров 50 сантиметров
+ не работает с UTF-8 выводить в начале слов ��, как я понял это функци не поддрежывает UTF-8
Как дописать?
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- class NumToText
- {
- // к примеру ('рубль', 'рубля', 'рублей')
- // или ('метр', 'метра', 'метров')
- // к примеру ('копейка', 'копейки', 'копеек')
- function NumToText()
- {
- }
- // установка описания мантисс
- function SetMant($mant)
- {
- $this->Mant = $mant;
- }
- // установка описания экспонент
- function SetExpon($expon)
- {
- $this->Expon = $expon;
- }
- // функция возвращает необходимый индекс описаний разряда
- // ('миллион', 'миллиона', 'миллионов') для числа $ins
- // например для 29 вернется 2 (миллионов)
- // $ins максимум два числа
- function DescrIdx($ins)
- {
- return 2;
- else
- {
- // для остальных десятков возьмем единицу
- $tmp = $ins%10;
- if($tmp == 1) // 1: 21 миллион, 1 миллион
- return 0;
- else if($tmp >= 2 && $tmp <= 4)
- return 1; // 2-4: 62 миллиона
- else
- return 2; // 5-9 48 миллионов
- }
- }
- // IN: $in - число,
- // $raz - разряд числа - 1, 1000, 1000000 и т.д.
- // внутри функции число $in меняется
- // $ar_descr - массив описаний разряда ('миллион', 'миллиона', 'миллионов') и т.д.
- // $fem - признак женского рода разряда числа (true для тысячи)
- function DescrSot(&$in, $raz, $ar_descr, $fem = false)
- {
- $ret = '';
- $in %= $raz;
- $descr = $ar_descr[ $this->DescrIdx($conv%100) ];
- if($conv >= 100)
- {
- 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
- $conv %= 100;
- }
- if($conv >= 10)
- {
- if($i == 1)
- {
- 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать',
- 'восемнадцать', 'девятнадцать' );
- $ret .= $DesEd[ $conv - 10 ] . ' ';
- $ret .= $descr;
- // возвращаемся здесь
- return $ret;
- }
- 'семьдесят', 'восемьдесят', 'девяносто' );
- $ret .= $Des[$i - 2] . ' ';
- }
- $i = $conv % 10;
- if($i > 0)
- {
- if( $fem && ($i==1 || $i==2) )
- {
- // для женского рода (сто одна тысяча)
- $ret .= $Ed[$i - 1] . ' ';
- }
- else
- {
- 'шесть', 'семь', 'восемь', 'девять' );
- $ret .= $Ed[$i - 1] . ' ';
- }
- }
- $ret .= $descr;
- return $ret;
- }
- // IN: $sum - число, например 1256.18
- function Convert($sum)
- {
- $ret = '';
- // имена данных перменных остались от предыдущей версии
- // когда скрипт конвертировал только денежные суммы
- $Kop = 0;
- $Rub = 0;
- // удалим пробелы внутри числа
- // флаг отрицательного числа
- $sign = false;
- if($sum[0] == '-')
- {
- $sign = true;
- }
- // заменим запятую на точку, если она есть
- }
- if($Rub)
- {
- // значение $Rub изменяется внутри функции DescrSot
- // новое значение: $Rub %= 1000000000 для миллиарда
- if($Rub >= 1000000000)
- $ret .= $this->DescrSot($Rub, 1000000000,
- if($Rub >= 1000000)
- $ret .= $this->DescrSot($Rub, 1000000,
- if($Rub >= 1000)
- $ret .= $this->DescrSot($Rub, 1000,
- $ret .= $this->DescrSot($Rub, 1, $this->Mant) . ' ';
- // если необходимо поднимем регистр первой буквы
- // для корректно локализованных систем можно закрыть верхнюю строку
- // и раскомментировать следующую (для легкости сопровождения)
- // $ret[0] = strtoupper($ret[0]);
- }
- if($Kop < 10)
- $ret .= '0';
- $ret .= $Kop . ' ' . $this->Expon[ $this->DescrIdx($Kop) ];
- // если число было отрицательным добавим минус
- if($sign)
- $ret = '-' . $ret;
- return $ret;
- }
- }
- class ManyToText extends NumToText
- {
- function ManyToText()
- {
- }
- }
- class MetrToText extends NumToText
- {
- function MetrToText()
- {
- }
- }
- ?>
- <html>
- <head>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
- </head>
- <body>
- <center>
- </center>
- <?PHP
- {
- $mt = new ManyToText();
- $nt = new MetrToText();
- echo $mt->Convert($_GET['num']) . '<BR />';
- echo $nt->Convert($_GET['num']) . '<BR />';
- }
- ?>
- <form action="" method="get">
- input number: <input type="text" name="num"> <input type="submit" value=" get ">
- </form>
- </body>
- </html>