Найти в Дзене
InvizorGameAndCode

Число словами (на javascript)

Всем привет, хотел бы поделиться одним небольшим кодом связанным с автоматическим получением прописи числа, например, 22-> двадцать два.

Можно ввести до 6 знаков (до сотен тысяч), в принципе легко получить и миллионы, миллиарды и т.д. Изначально получаем деления на три знака, и задача сводится к записи трехзначного числа+ постановки окончания для слов тысяча (если нужно и \миллион\миллиард).
Для трехзначного числа анализируем цифры и отдельно обрабатываем случай нуля. Первая цифра самая простая. Для второй цифры есть исключения 11, 12, .. 19. Третья цифра определяет окончание 1\2-4\5-9 для тысяч.

<html>
<head>
</head>
<script language="Javascript">
function makestr(ival,isw)
{
if (ival==0)
{
if (isw==1) return "";
else return "ноль";
}

var c1 = Math.floor(ival/100);
var c2 = Math.floor(ival/10) % 10;
var c3 = ival % 10;

var cstr1=['сто','двести','триста','четыреста','пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];
var cstr2=['десять','двадцать','тридцать','сорок','пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
var cstr3=['один','два','три','четыре','пять', 'шесть', 'семь', 'восемь', 'девять'];
var cstr3_alt=['одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'];

var strlast = "";
if (isw==1)
{
cstr3[0]='одна';
cstr3[1]='две';

if (c3==1) strlast = ' тысяча ';
else if ((c3>=2)&&(c3<=4)) strlast = ' тысячи ';
else strlast = ' тысяч ';
}

var strp1 = "";
if (c1>=1) strp1=cstr1[c1-1]+" ";

var strp2 = "";
if (c2>=2) strp2=cstr2[c2-1]+" ";
if ((c2==1)&&(c3==0)) strp2=cstr2[c2-1]+" ";

var strp3 = "";
if (c3>=1) strp3=cstr3[c3-1];

if ((c2==1)&&(c3>=1)) strp3=cstr3_alt[c3-1];

return strp1+strp2+strp3+strlast;
}

function f()
{
var num = document.getElementById("ival").value;
if (num<0)
{
alert("Значение не должно быть меньше 0");
return;
}
if (num>999999)
{
alert("Значение не должно быть больще 999999");
return;
}
var num1 = Math.floor(num/1000);
var num2 = num % 1000;

document.getElementById("tval").value=makestr(num1,1) + makestr(num2,0);
}
</script>
<body>
<input id="ival" type="number" value=235433>
<input id="btnok" type="button" value="ok" onclick="f()"><br>
<input id="tval" type="text" value="" size=100>
</body>
</html>