PDA

Просмотр полной версии : REC. Алгоритм число -> пропись


Acsidian
02.03.2005, 17:44
Ищу алгоритм представления числового значения прописью.
Для сайта... - на php или на java

Ghost
02.03.2005, 18:41
Ты имеешь в виду вот это?<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
Да хотел подправить кое-что с написанием "тысяч"/"тысяча"/"тысячи" и проч., но вроде все это сделал вчера, просто полностью протестить времени не было. Юзай.

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