Насколько применимо вообще - не знаю, но задачу, под которую писал, функция решила:
function sklon(num, basic, ed, do4, posle5)
// (число, основа, окончание для ед.ч., для NNN2...NNN4, NNN5...NNN0)
{
var slovco = basic;
if(num-Math.floor(num) != 0) slovco += do4;
else
{
//не знаю лучшего способа для обрезания :)
var sht;
if(num>=100)
{
sht = num*0.01;
sht = Math.round(sht);
sht = num - sht*100;
}
else sht = num;
if(sht>=5 && sht<=20) slovco+=posle5;
else
{
if(sht%10 == 1) slovco+=ed;
else
{
if(sht%10 > 4) slovco+=posle5;
else
{
if(sht%10 == 0) slovco+=posle5;
else
{
slovco+=do4;
}
}
}
}
}
return slovco;
}
for(var i=0; i<=1001; i++)
{
var word = sklon(i, 'пользовател', 'ь', 'я', 'ей');
alert(i+' '+word);
}