PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (3): « 1 2 [3]

> Найдено сообщений: 31
Jakeryf Отправлено: 05 Февраля, 2007 - 18:12:55 • Тема: Перевод численных значений в строки... • Форум: Пользовательские функции

Ответов: 5
Просмотров: 761
PHP:
скопировать код в буфер обмена
  1.  
  2.  print write_price_in_words(5627.99);
  3.  
  4.   //цена прописью
  5.   function write_price_in_words($price)
  6.   {
  7.     $price = number_format($price, 2, '.', '');
  8.     $point = strpos($price, '.');
  9.     //отделяем рубли от копеек
  10.     if(!empty($point))
  11.     {
  12.       $rub = substr($price, 0, $point);
  13.       $kop = substr($price, $point + 1);
  14.     }
  15.     //преобразуем рубли
  16.     $str = write_number_in_words($rub) ;
  17.     //пишем рублей(ь,я)
  18.     $word = " рублей";
  19.     //последнее число
  20.     $last_digit = $rub[(strlen($rub) - 1)];
  21.     //предпоследнее число
  22.     $pred_last_digit = $rub[(strlen($rub) - 2)];
  23.     if($last_digit == '1' && $pred_last_digit != '1')
  24.       $word = " рубль";
  25.     elseif(($last_digit == '2' || $last_digit == '3' || $last_digit == '4') && $pred_last_digit != '1')
  26.       $word = " рубля";
  27.     $str .= $word;
  28.     //преобразуем копейки
  29.     if(!empty($kop))
  30.     {
  31.  
  32.       $str .= write_number_in_words($kop, 'femininum') ;
  33.       //пишем копейка (и, ек)
  34.       $word = " копеек";
  35.       //последнее число
  36.       $last_digit = $kop[(strlen($kop) - 1)];
  37.       //предпоследнее число
  38.       $pred_last_digit = $kop[(strlen($kop) - 2)];
  39.       if($last_digit == '1' && $pred_last_digit != '1')
  40.                $word = " копейка";
  41.              elseif(($last_digit == '2' || $last_digit == '3' || $last_digit == '4') && $pred_last_digit != '1' )
  42.                $word = " копейки";
  43.       $str .= $word;
  44.     }
  45.     return $str;
  46.   }
  47.  
  48.   //допустимый диапазон чисел 0 .. 999999
  49.   //число прописью
  50.   function write_number_in_words ($num, $genus = 'masculinum')
  51.   {
  52.     //разряд: единицы, десятки, сотни, тысячи
  53.     $cur_order = "единицы";
  54.     $cur_thousands_order = "единицы";
  55.     if($num == 0)
  56.       return " 00";
  57.     $num = strval($num);
  58.     $limit = strlen($num) - 1;
  59.     for($i = $limit; $i >= 0; $i--)
  60.     {
  61.       //тысячный разряд
  62.       if($cur_order == "тысячи")
  63.       {
  64.         //сотни
  65.         if($cur_thousands_order == "сотни")
  66.         {
  67.           $str = write_units_hundreds($num[$i]).$str;
  68.         }
  69.         //десятки
  70.         if($cur_thousands_order == "десятки")
  71.         {
  72.           $str = write_units_tens($num[$i], $next_digit).$str;
  73.           $cur_thousands_order = "сотни";
  74.           $next_digit = '';
  75.         }
  76.         //единицы
  77.         if($cur_thousands_order == "единицы")
  78.         {
  79.           if($num[$i-1] == "1")
  80.           {
  81.             $next_digit = $num[$i];
  82.             $str = " тысяч".$str;
  83.           }
  84.           else
  85.             $str = write_units_thousands_units($num[$i]).$str;
  86.           $cur_thousands_order = "десятки";
  87.         }
  88.       }
  89.       //сотни
  90.       if($cur_order == "сотни")
  91.       {
  92.         $str = write_units_hundreds($num[$i]).$str;
  93.         $cur_order = "тысячи";
  94.       }
  95.       //десятки
  96.       if($cur_order == "десятки")
  97.       {
  98.         $str = write_units_tens($num[$i], $next_digit).$str;
  99.         $cur_order = "сотни";
  100.         $next_digit = '';
  101.       }
  102.       //единицы
  103.       if($cur_order == "единицы")
  104.       {
  105.         if($num[$i-1] == "1")
  106.           $next_digit = $num[$i];
  107.         else
  108.           $str = write_units($num[$i], $genus);
  109.         $cur_order = "десятки";
  110.       }
  111.     }
  112.     return($str);
  113.   }
  114.  
  115.     //принадлежит функции write_number_in_words
  116.     //преобразует десятки
  117.     function write_units_tens ($tens, $next_digit)
  118.     {
  119.       $tens .= $next_digit;
  120.       if($tens == 2) $str_tens = " двадцать";
  121.       if($tens == 3) $str_tens = " тридцать";
  122.       if($tens == 4) $str_tens = " сорок";
  123.       if($tens == 5) $str_tens = " пятьдесят";
  124.       if($tens == 6) $str_tens = " шестьдесят";
  125.       if($tens == 7) $str_tens = " семьдесят";
  126.       if($tens == 8) $str_tens = " восемьдесят";
  127.       if($tens == 9) $str_tens = " девяносто";
  128.       if($tens == 10) $str_tens = " десять";
  129.       if($tens == 11) $str_tens = " одиннадцать";
  130.       if($tens == 12) $str_tens = " двенадцать";
  131.       if($tens == 13) $str_tens = " тринадцать";
  132.       if($tens == 14) $str_tens = " четырнадцать";
  133.       if($tens == 15) $str_tens = " пятнадцать";
  134.       if($tens == 16) $str_tens = " шестнадцать";
  135.       if($tens == 17) $str_tens = " семнадцать";
  136.       if($tens == 18) $str_tens = " восемнадцать";
  137.       if($tens == 19) $str_tens = " девятнадцать";
  138.       return($str_tens);
  139.     }
  140.  
  141.     //принадлежит функции write_number_in_words
  142.     //преобразует сотни
  143.     function write_units_hundreds ($hundreds)
  144.     {
  145.       if($hundreds == 1) $str_hundreds = " сто";
  146.       if($hundreds == 2) $str_hundreds = " двести";
  147.       if($hundreds == 3) $str_hundreds = " триста";
  148.       if($hundreds == 4) $str_hundreds = " четыреста";
  149.       if($hundreds == 5) $str_hundreds = " пятьсот";
  150.       if($hundreds == 6) $str_hundreds = " шестьсот";
  151.       if($hundreds == 7) $str_hundreds = " семьсот";
  152.       if($hundreds == 8) $str_hundreds = " восемьсот";
  153.       if($hundreds == 9) $str_hundreds = " девятьсот";
  154.       return($str_hundreds);
  155.     }
  156.  
  157.     //принадлежит функции write_number_in_words
  158.     //преобразует единицы тысячного разряда
  159.     function write_units_thousands_units ($hundreds)
  160.     {
  161.       if($hundreds == 0) $str_hundreds = " тысяч";
  162.       if($hundreds == 1) $str_hundreds = " одна тысяча";
  163.       if($hundreds == 2) $str_hundreds = " две тысячи";
  164.       if($hundreds == 3) $str_hundreds = " три тысячи";
  165.       if($hundreds == 4) $str_hundreds = " четыре тысячи";
  166.       if($hundreds == 5) $str_hundreds = " пять тысяч";
  167.       if($hundreds == 6) $str_hundreds = " шесть тысяч";
  168.       if($hundreds == 7) $str_hundreds = " семь тысяч";
  169.       if($hundreds == 8) $str_hundreds = " восемь тысяч";
  170.       if($hundreds == 9) $str_hundreds = " девять тысяч";
  171.       return($str_hundreds);
  172.     }
  173.  
  174.     //принадлежит функции write_number_in_words
  175.     //преобразует единицы
  176.     function write_units ($units, $genus='masculinum')
  177.     {
  178.       if($genus == 'masculinum')
  179.       {
  180.          if($units == 1) $str_units = " один";
  181.                if($units == 2) $str_units = " два";
  182.       }
  183.       if($genus == 'femininum')
  184.       {
  185.          if($units == 1) $str_units = " одна";
  186.                if($units == 2) $str_units = " две";
  187.  
  188.       }
  189.       if($units == 3) $str_units = " три";
  190.       if($units == 4) $str_units = " четыре";
  191.       if($units == 5) $str_units = " пять";
  192.       if($units == 6) $str_units = " шесть";
  193.       if($units == 7) $str_units = " семь";
  194.       if($units == 8) $str_units = " восемь";
  195.       if($units == 9) $str_units = " девять";
  196.       return($str_units);
  197.     }
  198.  

Страниц (3): « 1 2 [3]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB