IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   REC. Алгоритм число -> пропись (http://www.imho.ws/showthread.php?t=80894)

Acsidian 02.03.2005 17:44

REC. Алгоритм число -> пропись
 
Ищу алгоритм представления числового значения прописью.
Для сайта... - на php или на java

Ghost 02.03.2005 18:41

Ты имеешь в виду вот это?
Код HTML:

<HTML>
<HEAD>
<SCRIPT TYPE="text/javascript">
var dig1 = new Array();
dig1 = ['сто', 'двести', 'тристо', 'четыресто', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];
var dig2 = new Array();
dig2 = ['десять', 'двадцать', 'трицать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
var dig3 = new Array();
dig3 = ['одиннадцать', 'двенацать', 'тринадцать', 'четырнацать', 'пятьнацать', 'шестьнацать', 'семьнацать', 'восемьнацать', 'девятнацать'];
var dig4 = new Array();
dig4 = ['один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'];
var dig5 = new Array();
dig5 = ['', 'тысяч', 'миллион'];
var dig6 = new Array();
dig6 = ['одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'];

function subConv(i, d) {
  var q = new String();
  q = '';
  var i1 = parseInt(d / 100);
  d = d - 100 * i1;
  var i2 = parseInt(d /  10);
  d = d -  10 * i2;
  if (i1  > 0) { q = dig1[i1-1]; }
  if (i2 != 1) {
    if (i2 > 0) { q += (' ' + dig2[i2-1]); }
    if (d != 0) { q += (i != 1)?(' ' + dig4[d-1]):(' ' + dig6[d-1]); }
  } else {
    if (d != 0) { q += (' ' + dig3[d-1]); }
    else { q += (' ' + dig2[0]); }
  }
  if (q != '') { q += (' ' + dig5[i]); }
  if (i == 2) {
    if ((d == 0) || (d >= 5) || (i2 == 1)) { q += 'ов'; }
    if ((d >= 2) && (d <= 4) && (i2 != 1)) { q += 'а'; }
  }
  if ((i == 1) && (i2 != 1)) {
    if (d == 1) { q += 'а'; }
    if ((d >
= 2) && (d <= 4)) { q += 'и'; }
  }
  return q+' ';
}

function myConvert(s) {
  var r = new String();
  r = '';
  if (s != 0) {
    var i = -1;
    while (s >
0) {
      d = s - 1000 * parseInt(s / 1000);
      s = parseInt(s / 1000);
      i++;
      r = subConv(i, d) + r;
    }
  } else { r = 'ноль'; }
  var divConv = document.getElementById('myConv');
  divConv.innerHTML = r;
}
</SCRIPT>
</HEAD>
<BODY>
<INPUT TYPE="text" NAME="myVal">
<INPUT TYPE="button" VALUE="convert" onCLick="javascript:myConvert(myVal.value);">
<DIV ID="myConv"></DIV>
</BODY>
</HTML>

В принципе можно доработать, только сейчас времени нет этим заниматься...

Acsidian 03.03.2005 09:38

Да! Именно, именно! Ато по поисковикам выдавало только VBA С++ и другую разную нечисть... которую нужно было переделывать!

А что там еще ты хотел доработать?
Впринципе свою задачу перевода значения скрипт полностью выполняет, единственное я миллиарды еще добавлю, а так все класс!
Спасибо! +5

Ghost 03.03.2005 09:51

Acsidian
Да хотел подправить кое-что с написанием "тысяч"/"тысяча"/"тысячи" и проч., но вроде все это сделал вчера, просто полностью протестить времени не было. Юзай.

З.Ы. С миллиардами у напряг вышел: видимо слишком большие числа для того типа данных, который я использовал. Или где-то в коде сам слажал... Удачи.


Часовой пояс GMT +4, время: 07:14.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.