Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Перевод численных значений в строки...

 PHP.SU

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


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

> Описание: На примере перевода цен товаров.
CyberBoss
Отправлено: 04 Февраля, 2007 - 17:14:28
Post Id



Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Февр. 2007  
Откуда: Boston, USA


Помог: 0 раз(а)




Вощем такая вот проблема!
щас делаю генерацию счета на php
и там надо чтобы все числа были переведены в строки!
например: 1205 = одна тысяча двеси пять
подскажите плз как сделать такой перевот на php...
 
 Top
valenok Модератор
Отправлено: 04 Февраля, 2007 - 18:16:42
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Создаёшь два массива, число и название, потом переводишь.

Можешь доработать:

PHP:
скопировать код в буфер обмена
  1. <?
  2. $thousand[0]=Array("","Тысяча ","Две тысячи ","Три тысячи ","Четыре тысячи ","Пять тысяч ","Шесть тысяч ","Семь тысяч ","Восемь тысяч ","Девять тысяч ","Десять тысяч ");
  3. $hundreds[0]=Array("","сто ","двести ","тристо ","четыресто ","пятьсот ","шестьсот ","семьсот ","восемьсот ","девятьсот ");
  4. $tens[0]=Array("","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ","семьдесят ","восемьдесят ","девяносто ");
  5. $units[0]=Array("","один","два","три","четыре","пять","шесть","семь","восемь","девять");
  6.  
  7.  
  8. $thousand[1]=Array(0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000);
  9. $hundreds[1]=Array(0,100,200,300,400,500,600,700,800,900);
  10. $tens[1]=Array(0,20,30,40,50,60,70,80,90);
  11. $units[1]=Array(0,1,2,3,4,5,6,7,8,9);
  12.  
  13. $arg=Array($thousand,$hundreds,$tens,$units);
  14.  
  15. $r1='';$r2=0;
  16. for($i=0;$i<4;$i++){ $rand=rand(0,8);
  17. $r1.=$arg[$i][0][$rand];
  18. $r2+=$arg[$i][1][$rand];
  19. }
  20.  
  21. echo "<center><h4>".$r1."</h4>".$r2;
  22.  


-----
Truly yours, Sasha.
 
My status
 Top
CyberBoss
Отправлено: 04 Февраля, 2007 - 18:32:34
Post Id



Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Февр. 2007  
Откуда: Boston, USA


Помог: 0 раз(а)




АААААА! я вас люблю...
 
 Top
Jakeryf
Отправлено: 05 Февраля, 2007 - 18:12:55
Post Id



Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Янв. 2007  
Откуда: System Virta


Помог: 0 раз(а)




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.  


-----
What's common between Halloween and Christmas? Every programmer knows: 31 oct = 25 dec.
 
 Top
CyberBoss
Отправлено: 05 Февраля, 2007 - 20:22:51
Post Id



Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Февр. 2007  
Откуда: Boston, USA


Помог: 0 раз(а)




СУПЕр ПРОСТО!
незнаю как и благодарить...
 
 Top
Wange
Отправлено: 06 Июня, 2007 - 14:33:27
Post Id



Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Июль 2006  
Откуда: Екатеринбург


Помог: 0 раз(а)




Jakeryf
на 79 строке выдается ошибка Uninitialized string offset: -1
PHP:
скопировать код в буфер обмена
  1.  
  2. 77 if($cur_thousands_order == "единицы")
  3. 78         {
  4. 79           if($num[$i-1] == "1")
  5. 80           {
  6. 81            $next_digit = $num[$i];
  7. 82             $str = " тысяч".$str;
  8. 83           }
  9. 84           else
  10. 85             $str = write_units_thousands_units($num[$i]).$str;
  11. 86           $cur_thousands_order = "десятки";
  12. 87         }
  13.  


функция очень хороша. из классических. с разбиением по родам =).
http://kladovka[dot]net[dot]ru/delphibas[dot][dot][dot]ert&id=10264 - здесь для дельфи лежит подобная, там еще придуман нейтральный род =D


-----
Не пытайся, делай
обучение, праздники
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB