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]   

> Без описания
jonston
Отправлено: 18 Июня, 2013 - 15:10:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


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




Здравствуйте!Вот написал скрипт конвертирующий числовое значение например 12343 в строковое двенадцать тысяч триста сорок три.
Просьба оценить профессиональным взглядом код и сказать что можно оптимизировать либо вашу версию скрипта.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.     var billions = ['миллиард','миллиарда','миллиардов'];
  3.     var millions = ['миллион','миллиона','миллионов'];
  4.     var thousands = ['тысяча','тысячи','тысяч'];
  5.    
  6.     var hundreds = {
  7.         '1':'сто','2':'двести','3':'триста',
  8.         '4':'четыреста','5':'пятьсот','6':'шестьсот',
  9.         '7':'семьсот','8':'восемьсот','9':'девятьсот',
  10.         '0':'','00':'','000':''
  11.     };
  12.  
  13.     var tens = {
  14.         '2':'двадцать','3':'тридцать','4':'сорок',
  15.         '5':'пятьдесят','6':'шестьдесят','7':'семьдесят',
  16.         '8':'восемьдесят','9':'девяносто',
  17.         '0':'','00':''
  18.     };
  19.  
  20.     var units = {
  21.         '1':['один','одна'],'2':['два','две'],'3':'три',
  22.         '4':'четыре','5':'пять','6':'шесть','7':'семь',
  23.         '8':'восемь','9':'девять','10':'десять','11':'одинадцать',
  24.         '12':'двенадцать','13':'тринадцать','14':'четырнадцать','15':'пятнадцать',
  25.         '16':'шестнадцать','17':'семьнадцать','18':'восемьнадцать','19':'девятнадцать',
  26.         '0':''
  27.     };
  28.    
  29.     function number_to_str(number){
  30.         number = number - 0 + '';
  31.         number.substr(12);
  32.        
  33.         var length = number.length/3;
  34.         var parts = [];
  35.         var output = [];
  36.        
  37.         for(i = Math.ceil(length); i > 0; i--){
  38.             length = number.length;
  39.             start = (length > 3) ? length - 3 : 0;
  40.            
  41.             var part = number.substr(start, 3);
  42.             number = number.substr(0, start);
  43.             parts.push(part);
  44.         }
  45.        
  46.         length = parts.length - 1;
  47.  
  48.         var str;
  49.         for(i = length; i >= 0; i--){
  50.             str = parts[i];
  51.             //console.log(str);
  52.             var substr = str - 0 + '';
  53.             if(substr > 99){
  54.                 output.push(hundreds[str.substr(0, 1)]);
  55.                 substr = substr.substr(1, 2) - 0 + '';
  56.             }
  57.  
  58.             //console.log(substr);
  59.             if(substr > 19){
  60.                 output.push(tens[substr.substr(0, 1)]);
  61.                 substr = substr.substr(1, 1);
  62.             }
  63.  
  64.             //console.log(substr);
  65.             if(substr < 20 && substr > 2){
  66.                 output.push(units[substr]);
  67.             }
  68.  
  69.             if(substr == 1 || substr == 2){
  70.                 if(i == 1)
  71.                     var sex = 1
  72.                 else
  73.                     var sex = 0
  74.                 output.push(units[substr][sex]);
  75.             }
  76.            
  77.             if(str > 99)
  78.                 str = str.substr(str.length - 2, 2);
  79.  
  80.             if(str > 19)
  81.                 str = str.substr(str.length - 1, 1);
  82.  
  83.             if(str == 1){
  84.                 var declension = 0;
  85.             }else if(str > 1 && str < 5){
  86.                 var declension = 1;
  87.             }else{
  88.                 var declension = 2;                
  89.             }
  90.            
  91.             if(i == 3 && str != '000'){
  92.                 output.push(billions[declension]);
  93.             }
  94.             if(i == 2 && str != '000'){
  95.                 output.push(millions[declension]);
  96.             }
  97.             if(i == 1 && str != '000'){
  98.                 output.push(thousands[declension]);
  99.             }
  100.         }        
  101.         output = output.join(' ');
  102.         return output;
  103.     }
  104.  

посмотреть можно здесь.Смотреть в консоли.
http://news[dot]codemaster[dot]com[dot]ua/number_to_str[dot]html

(Отредактировано автором: 18 Июня, 2013 - 16:05:30)



-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 18 Июня, 2013 - 15:29:34
Post Id


Профессионал


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


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




jonston
1013500019 -> "один миллиард тринадцать миллионов пятьсот тысяч девятнадцать"
1413500019 -> "один миллиард четыреста тринадцать миллиона пятьсот тысяч девятнадцать"
Не спрашивайте, как я догадался


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 18 Июня, 2013 - 15:31:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


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




EuGen пишет:
jonston
1013500019 -> "один миллиард тринадцать миллионов пятьсот тысяч девятнадцать"
1413500019 -> "один миллиард четыреста тринадцать миллиона пятьсот тысяч девятнадцать"
Не спрашивайте, как я догадался

Уже полчаса сижу не пойму в чем проблема.
(Добавление)
EuGen пишет:
Не спрашивайте, как я догадался

исправил.
(Добавление)
Модератор, измени пожалуйста название темы на: "конвертация числа в словесную форму".Может кому пригодится.Все проверил.Все работает.
(Добавление)
jonston пишет:
EuGen пишет:
jonston
1013500019 -> "один миллиард тринадцать миллионов пятьсот тысяч девятнадцать"
1413500019 -> "один миллиард четыреста тринадцать миллиона пятьсот тысяч девятнадцать"
Не спрашивайте, как я догадался

Уже полчаса сижу не пойму в чем проблема.
(Добавление)
EuGen пишет:
Не спрашивайте, как я догадался

исправил.
(Добавление)
Модератор, измени пожалуйста название темы на: "конвертация числа в словесную форму".Может кому пригодится.Все проверил.Все работает.

Спасибо!

(Отредактировано автором: 18 Июня, 2013 - 15:35:27)



-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB