-
Code's Tags
-
Your Codes
-
Reffers
-
Linked Codes
|
Code:
Short link for Twitter:
HTML:
HTML view:
Copy Source | Copy HTML- /**
* Сумма пропиÑью * @author runcore */
- function num2str($inn, $stripkop=false) {
- $nol = 'ноль';
- $str[100]= array('','Ñто','двеÑти','триÑта','четыреÑта','пÑтьÑот','шеÑтьÑот', 'ÑемьÑот', 'воÑемьÑот','девÑтьÑот');
- $str[11] = array('','деÑÑть','одиннадцать','двенадцать','тринадцать', 'четырнадцать','пÑтнадцать','шеÑтнадцать','Ñемнадцать', 'воÑемнадцать','девÑтнадцать','двадцать');
- $str[10] = array('','деÑÑть','двадцать','тридцать','Ñорок','пÑтьдеÑÑÑ‚', 'шеÑтьдеÑÑÑ‚','ÑемьдеÑÑÑ‚','воÑемьдеÑÑÑ‚','девÑноÑто');
- $sex = array(
- array('','один','два','три','четыре','пÑть','шеÑть','Ñемь', 'воÑемь','девÑть'),// m
- array('','одна','две','три','четыре','пÑть','шеÑть','Ñемь', 'воÑемь','девÑть') // f
- );
- $forms = array(
- array('копейка', 'копейки', 'копеек', 1), // 10^-2
- array('рубль', 'рублÑ', 'рублей', 0), // 10^ 0
- array('тыÑÑча', 'тыÑÑчи', 'тыÑÑч', 1), // 10^ 3
- array('миллион', 'миллиона', 'миллионов', 0), // 10^ 6
- array('миллиард', 'миллиарда', 'миллиардов', 0), // 10^ 9
- array('триллион', 'триллиона', 'триллионов', 0), // 10^12
- );
- $out = $tmp = array();
- // Поехали!
- $tmp = explode('.', str_replace(',','.', $inn));
- $rub = number_format($tmp[ 0], 0,'','-');
- if ($rub== 0) $out[] = $nol;
- // Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¿ÐµÐµÐº
- $kop = isset($tmp[1]) ? substr(str_pad($tmp[1], 2, '0', STR_PAD_RIGHT), 0,2) : '00';
- $segments = explode('-', $rub);
- $offset = sizeof($segments);
- if ((int)$rub== 0) { // еÑли 0 рублей
- $o[] = $nol;
- $o[] = morph( 0, $forms[1][ 0],$forms[1][1],$forms[1][2]);
- }
- else {
- foreach ($segments as $k=>$lev) {
- $sexi= (int) $forms[$offset][3]; // определÑем род
- $ri = (int) $lev; // текущий Ñегмент
- if ($ri== 0 && $offset>1) {// еÑли Ñегмент==0 & не поÑледний уровень(там Units)
- $offset--;
- continue;
- }
- // нормализациÑ
- $ri = str_pad($ri, 3, '0', STR_PAD_LEFT);
- // получаем циферки Ð´Ð»Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð°
- $r1 = (int)substr($ri, 0,1); //Ð¿ÐµÑ€Ð²Ð°Ñ Ñ†Ð¸Ñ„Ñ€Ð°
- $r2 = (int)substr($ri,1,1); //втораÑ
- $r3 = (int)substr($ri,2,1); //третьÑ
- $r22= (int)$r2.$r3; //Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ð¸ третьÑ
- // разгребаем порÑдки
- if ($ri>99) $o[] = $str[100][$r1]; // Сотни
- if ($r22>20) {// >20
- $o[] = $str[10][$r2];
- $o[] = $sex[ $sexi ][$r3];
- }
- else { // <=20
- if ($r22>9) $o[] = $str[11][$r22-9]; // 10-20
- elseif($r22> 0) $o[] = $sex[ $sexi ][$r3]; // 1-9
- }
- // Рубли
- $o[] = morph($ri, $forms[$offset][ 0],$forms[$offset][1],$forms[$offset][2]);
- $offset--;
- }
- }
- // Копейки
- if (!$stripkop) {
- $o[] = $kop;
- $o[] = morph($kop,$forms[ 0][ 0],$forms[ 0][1],$forms[ 0][2]);
- }
- return preg_replace("/\s{2,}/",' ',implode(' ',$o));
- }
-
- /**
* СклонÑем Ñловоформу */
- function morph($n, $f1, $f2, $f5) {
- $n = abs($n) % 100;
- $n1= $n % 10;
- if ($n>10 && $n<20) return $f5;
- if ($n1>1 && $n1<5) return $f2;
- if ($n1==1) return $f1;
- return $f5;
- }
|