Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Словом - функция за превръщане на числа в думи

Featured Replies

Здравейте,

Има една JS функция за превръщане на числа в думи, чийто автор не съм сигурен кой е. Ето едно място, където я има публикувана.

Тъй като на мен ми беше необходима същата функция, но на английски, аз я попреправих (със слабите си познания по JS). Публикувам кода тук, защото може да потрябва някому. Ако видите грешки, поправете ги.

// Numbers to Words Function - ENGLISH

function toWordsCurrency(number,currency) {
  var lv = parseInt(number);
  var flval = parseFloat(number);
  var st = Math.round(flval*100)%100;
 
  var res = '';
  if (lv != 0) {
    res += toWords(lv) + currency;
  }
  else {
    res = 'zero '+ currency;
  }
  if (st != 0) {
    if (res != '') res += ' and ';
    res += toWords(st) +'cents.';
  }
  else {
	res += ' only.';
  }
 
  return res;
}
//  ----------------------------------------------------------------------------
function toWords(num) {
//num : число с макс. 12 цифри,
//Gender : 'male', 'female', 'middle' = default
  //var TempGender = [Gender,'female','male','male'];
  var mantisi = [['','thousand ','million ','billion '],
                 ['','thousands ','millions ','billions ']];
  var ss;
  var pl;
  var in_pos = 0;
  var Result = '';
 
  var s = String(num);
  var len = parseInt((s.length + 2)/3);
  while (s.length < 3*len) s = '0'+ s;
 
  for (var j = len-1; j >= 0; j--) {
    var gr = s.substr((len-1-j)*3,3);
    if (gr != '000') {
      if (j == 1 && gr == '001') {  // хиляда
        ss = '';
      } else {
        ss = convert(gr);
      }
      if (gr == '001') pl = 1;  else pl = 0;
      ss += mantisi[pl][j];
     
      if (ss.indexOf(' and ') == -1) in_pos = Result.length; else in_pos = 0;
      Result += ss;
    }
  }
  if (in_pos != 0) {
         Result = Result.substr(0, in_pos) +'and '+ Result.substr(in_pos, Result.length);
  }
 
  return Result;
}
//  ----------------------------------------------------------------------------
function convert(in_s) {
  var hundreds = ['','hundred ','two hundred ','three hundred '];
  var tens = ['', '', 'twen', 'thir', 'for', 'fif', 'six', 'seven', 'eigh', 'nine'];
  var teens = ['ten ','eleven ','twelve ','thirteen ',' ','fifteen ','','','eighteen '];
  var ones = ['','one','two','three','four','five','six','seven','eight','nine'];
  /*
  one, two, three, four, five, six, seven, eight, nine,
  ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen,
  twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety
  */
 
  var stot  = parseInt(in_s.charAt(0));
  var deset = parseInt(in_s.charAt(1));
  var ed    = parseInt(in_s.charAt(2));
 
  var Result = '';
  if (stot > 0 && stot <= 3) Result = hundreds[stot];
  else if (stot > 3) Result = ones[stot] +' hundred ';
 
  if (deset == 1) {
    if (Result != '') Result += 'and ';
    if (ed >= 0 && ed != 4 && ed != 6 && ed != 7 && ed != 9) Result += teens[ed];
    else Result += ones[ed] +'teen ';
  }
  else {
    if (deset > 1) {
      if (Result != '' && ed == 0 ) Result += 'and ';
      /*
	  if (deset == 2) Result += 'twenty ';
      else Result += edinici[deset] +'ty ';
	  */
	  else Result += tens[deset] + 'ty ';
    }
   
    if (ed != 0) {
      if (Result != '') Result += '';
      Result += ones[ed] +' ';
    }
  }
 
  return Result;
}

function showResultNew(id_div, id_num, id_currency) {
	var div = document.getElementById(id_div);
	var leva = document.getElementById(id_num);
	var curr = document.getElementById(id_currency);
		
	if(div) {
		if(leva.value)
			div.value = toWordsCurrency(leva.value,curr.value);
		else
			div.value = "NaN";
	}
}
// END Numbers to Words Function - ENGLISH

Функцията се вика с showResultNew('totalwords','totalprice','currency'); , където totalwords е полето, в което ще се изпише резултатът, totalprice е сумата, която ще превръщаме в цифри, а currency е полето, от което вземаме валутата.

Както виждате в самия код, коментирал съм някои части, които не са необходими за английски текст, поради липсата на окончания за род и пр. Запазил съм ги, за да мога и аз, и някой друг, сравняващ двете функции да вижда по-ясно какво съм правил.

Не разбрах. Това за английски ли е? За английски съм попадал на разни плъгини или нещо такова беше, но проблемно беше за българският език. Би ли показал за българския, в нета има все сгрешени...

  • Автор

Не разбрах. Това за английски ли е? За английски съм попадал на разни плъгини или нещо такова беше, но проблемно беше за българският език. Би ли показал за българския, в нета има все сгрешени...

За български съм дал линка и работи. А мисля, че доста ясно съм написал, че дадената от мен преработка е за английски, което си личи като погледнеш и самия код. Скриптовете, които могат да се намерят в нета, на javascript и за английски език аз лично не можах да подкарам и да ми вършат работа. Основният скрипт, който се намира, е един, писан от индийски програмист, а в индийските цифри има едни особености. Също така тези скриптове, които бях намерил в нета пренебрегваха цифрите след десетичния знак, а на мен ми трябваше такъв, който изписва цялата сума плюс центовете (може лесно да се пригоди и за валути, които нямат центове, но в общи линии EUR, USD, CAD все ползват центове).

Редактирано от dalai.lamia (преглед на промените)

  • 1 година по-късно...

Ако някой се интересува от код на С# да ми пише. Имам версии за български английски, словно произнасяне на IP адреси и какви ли не други щуротии "собствена изработка". Като искам да благодаря на всички, писали по тази тема тук, че ме запалиха да сътворя собствен код на тази тема.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.