новости

27 июня 2015

Липецкая областная детская библиотека

ДАЛЕЕ

14 мая 2015

Студия мебели "Нарния"

ДАЛЕЕ

25 марта 2015

Мини-трактора в Липецке

ДАЛЕЕ

27 ноября 2014

ТехИнвестПроект

ДАЛЕЕ

5 мая 2014

Парикмахерские курсы "Лучший выбор"

ДАЛЕЕ


Архив новостей

Сумма прописью на JavaScript


Основной целью при написании являлось изобретение алгоритма, не основанного на математических действиях над заданным числом, а представлением его строковым значением с последующим посимвольным разбором.

<script language="JavaScript" type="text/javascript">

/* ----------------------------
   Сумма прописью на JavaScript
                 Автор: Mad Max
---------------------------- */


var money;
var price;
var rub, kop;
var litera = sotny = desatky = edinicy = minus = "";
var k = 0, i, j;

N = ["", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять",
"", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать",
"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто",
"", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот",
"тысяч", "тысяча", "тысячи", "тысячи", "тысячи", "тысяч", "тысяч", "тысяч", "тысяч", "тысяч",
"миллионов","миллион","миллиона","миллиона", "миллиона", "миллионов", "миллионов", "миллионов", "миллионов", "миллионов",
"миллиардов", "миллиард", "миллиарда", "миллиарда", "миллиарда", "миллиардов", "миллиардов", "миллиардов", "миллиардов", "миллиардов"];

var M = new Array(10);
for (j = 0; j < 10; ++j)
  M[j] = new Array(N.length);

for (i = 0; i < N.length; i++)
  for (j = 0; j < 10; j++)
    M[j][i] = N[k++]

var R = new Array("рублей", "рубль", "рубля", "рубля", "рубля", "рублей", "рублей", "рублей", "рублей", "рублей");
var K = new Array("копеек", "копейка", "копейки", "копейки", "копейки", "копеек", "копеек", "копеек", "копеек", "копеек");

function num2str(money, target)
{
  rub = "", kop = "";
  money = money.replace(",", ".");

  if(isNaN(money)) {document.getElementById(target).innerHTML = "Не числовое значение"; return}
  if(money.substr(0, 1) == "-") {money = money.substr(1); minus = "минус "}
   else minus = "";
  money = Math.round(money * 100) / 100 + "";

  if(money.indexOf(".") != -1)
    {
     rub = money.substr(0, money.indexOf("."));
     kop = money.substr(money.indexOf(".") + 1);
     if(kop.length == 1) kop += "0";
    }
  else rub = money;

  if(rub.length > 12) {document.getElementById(target).innerHTML = "Слишком большое число"; return}

  ru = propis(price = rub, R);
  ko = propis(price = kop, K);
  ko != "" ? res = ru + " " + ko: res = ru;
  ru == "Ноль " + R[0] && ko != ""? res = ko: 0;
  kop == 0? res += " ноль " + K[0]: 0;
  document.getElementById(target).innerHTML = (minus + res).substr(0,1).toUpperCase() + (minus + res).substr(1);
}

function propis(price, D)
{
  litera = "";
  for(i = 0; i < price.length; i += 3)
    {
     sotny = desatky = edinicy = "";
     if(n(i + 2, 2) > 10 && n(i + 2, 2) < 20)
       {
        edinicy = " " + M[n(i + 1, 1)][1] + " " + M[0][i / 3 + 3];
        i == 0? edinicy += D[0]: 0;
       }
     else
       {
        edinicy = M[n(i + 1, 1)][0];
        (edinicy == "один" && (i == 3 || D == K))? edinicy = "одна": 0;
        (edinicy == "два"  && (i == 3 || D == K))? edinicy = "две" : 0;
        i == 0 && edinicy != ""? 0: edinicy += " " + M[n(i + 1, 1)][i / 3 + 3];
        edinicy == " "? edinicy = "": (edinicy == " " + M[n(i + 1, 1)][i / 3 + 3])? 0: edinicy = " " + edinicy;
        i == 0? edinicy += " " + D[n(i + 1, 1)]: 0;
        (desatky = M[n(i + 2, 1)][2]) != ""? desatky = " " + desatky: 0;
       }
     (sotny = M[n(i + 3, 1)][3]) != ""? sotny = " " + sotny: 0;
     if(price.substr(price.length - i - 3, 3) == "000" && edinicy == " " + M[0][i / 3 + 3]) edinicy = "";
     litera = sotny + desatky + edinicy + litera;
    }
   if(litera == " " + R[0]) return "ноль" + litera;
     else return litera.substr(1);
}

function n(start,len)
{
  if(start > price.length) return 0;
    else return Number(price.substr(price.length - start, len));
}

</script>


XHTML-код:

<input id="num" onKeyUp="num2str(this.value, 'str')" /> //Поле для ввода числа

<div id="str" /> //Поле для вывода числа прописью

IE, Mozilla Firefox and Opera compatible
 
332614adminJavaScript30.05.2005
Имя:
Сайт:
Комментарий:
21.12.2011 19:18
YVeI5W , [url=http://einkvicxceul.com/]einkvicxceul[/url], [link=http://ocnvdhoaddse.com/]ocnvdhoaddse[/link], http://mvcdaaswuvxb.com/
21.12.2011 16:13
pjAu21 <a href="http://qvxkrgxwxmjc.com/">qvxkrgxwxmjc</a>
19.12.2011 22:32
DlPqnb , [url=http://ujdjdejvdopg.com/]ujdjdejvdopg[/url], [link=http://sygcgbvuerjg.com/]sygcgbvuerjg[/link], http://iqzcmgdmvtae.com/
19.12.2011 19:17
mryhlr <a href="http://rzfllspjhbvj.com/">rzfllspjhbvj</a>
19.12.2011 05:06
Hey, that post leaves me feeling fosloih. Kudos to you!
28.07.2011 13:01
SqRxu8 , [url=http://eevhsmuitplf.com/]eevhsmuitplf[/url], [link=http://kfwrosmpfjzw.com/]kfwrosmpfjzw[/link], http://nmeitmijlpog.com/
27.07.2011 17:57
EXpclm <a href="http://ukgaiblyrqhv.com/">ukgaiblyrqhv</a>
26.07.2011 20:42
Wheover wrote this, you know how to make a good article.
26.07.2011 18:54
It's like you're on a misison to save me time and money!
26.07.2011 12:29
nSQ5TD , [url=http://fcaxmqrcvljr.com/]fcaxmqrcvljr[/url], [link=http://kjppiufaozvo.com/]kjppiufaozvo[/link], http://ikwchsvlascn.com/
26.07.2011 10:05
Wonderful exlpantaion of facts available here.
25.07.2011 21:23
UOedsO <a href="http://jpmtmpcvegds.com/">jpmtmpcvegds</a>
25.07.2011 15:31
If you're looking to buy these atcriles make it way easier.
25.07.2011 13:28
Kewl you suhlod come up with that. Excellent!