Сумма прописью в PDF

Статус
Закрыто для дальнейших ответов.

bsi

Участник
Топикстартер
Сообщения
60
Реакции
6
В форме PDF есть поля, в одном вводится цифрами сумма и другое, где выводится эта сумма прописью. Прошу помощи в реализации данного решения. Прилагаются код для решения и сама форма. Как это все объединить.
 

Вложения

  • Сумма проп JavaScript.rar
    14.7 КБ · Просм.: 516
  • Сумма прописью.pdf
    73.2 КБ · Просм.: 623

bsi

Участник
Топикстартер
Сообщения
60
Реакции
6
Код:
1.    //function plural(n, forms) {
2.    //    return forms[n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2];
3.    //}
4.    function money2string(n){
5.        var s1=[['','',''],
6.            [['один','одна'],['десять','одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать'],'сто'],
7.            [['два','две'],'двадцать','двести'],
8.            ['три','тридцать','триста'],
9.            ['четыре','сорок','четыреста'],
10.            ['пять','пятьдесят','пятьсот'],
11.            ['шесть','шестьдесят','шестьсот'],
12.            ['семь','семьдесят','семьсот'],
13.            ['восемь','восемьдесят','восемьсот'],
14.            ['девять','девяносто','девятьсот']];
15.        var b=[['копейка','копейки','копеек'],
16.        ['рубль','рубля','рублей'],//['доллар','доллара','долларов'] или ['килограмм','килограмма','килограммов']
17.        ['тысяча','тысячи','тысяч'],
18.        ['миллион','миллиона','миллионов'],
19.        ['миллиард','миллиарда','миллиардов']//,['трилион',...],[]
20.        ];
21. 
22.        function m999(n,b,f){
23.            var s='';
24.            var t=s1[Math.floor(n/100)%10][2];
25.            if(t)s+=t+' ';
26. 
27.            var d=Math.floor(n/10)%10;
28.            t=s1[d][1];
29.            if(t instanceof Array){
30.                t=t[n%10];
31.                if(t)s+=t+' ';
32.            }else{
33.                if(t)s+=t+' ';
34.                t=s1[n%10][0];
35.                if(t instanceof Array)t=t[f==0 || f==2?1:0];
36.                if(t)s+=t;
37.            }
38. 
39.            return s+' '+plural(n,b[f])+(f>1?' ':'');
40.        }
41. 
42.        var i = Math.floor(n + 0.005),
43.            f = Math.floor(((n - i) * 100) + 0.5),
44.            s='';
45.        for (var j=1; i > 0.9999; i/=1000) {
46.            s=m999(Math.floor(i % 1000),b,j)+s;
47.            j++;
48.        }
49.        if(f>0)s=s+' '+m999(f,b,0)
50.        return s;
51.    }
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
Примерно вот так.
 

Вложения

  • Сумма прописью.pdf
    102.4 КБ · Просм.: 792

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 243
Реакции
10 852
На самом деле мы в личке более интересную функцию для пересчета нашли. ;)
Код:
function money2string(x){
        var currency='RUB';
 
  var groups=new Array();
 
  groups[0]=new Array();
  groups[1]=new Array();
  groups[2]=new Array();
  groups[3]=new Array();
  groups[4]=new Array();
 
  groups[9]=new Array();
 
// рубли
// по умолчанию
  groups[0][-1]={'RUB': 'рублей', 'USD': 'долларов США', 'EUR': 'евро'};
//исключения
  groups[0][1]={'RUB': 'рубль', 'USD': 'доллар США', 'EUR': 'евро'};
  groups[0][2]={'RUB': 'рубля', 'USD': 'доллара США', 'EUR': 'евро'};
  groups[0][3]={'RUB': 'рубля', 'USD': 'доллара США', 'EUR': 'евро'};
  groups[0][4]={'RUB': 'рубля', 'USD': 'доллара США', 'EUR': 'евро'};
 
// тысячи
// по умолчанию
  groups[1][-1]='тысяч';
//исключения
  groups[1][1]='тысяча';
  groups[1][2]='тысячи';
  groups[1][3]='тысячи';
  groups[1][4]='тысячи';
 
// миллионы
// по умолчанию
  groups[2][-1]='миллионов';
//исключения
  groups[2][1]='миллион';
  groups[2][2]='миллиона';
  groups[2][3]='миллиона';
  groups[2][4]='миллиона';
 
// миллиарды
// по умолчанию
  groups[3][-1]='миллиардов';
//исключения
  groups[3][1]='миллиард';
  groups[3][2]='миллиарда';
  groups[3][3]='миллиарда';
  groups[3][4]='миллиарда';
 
// триллионы
// по умолчанию
  groups[4][-1]='триллионов';
//исключения
  groups[4][1]='триллион';
  groups[4][2]='триллиона';
  groups[4][3]='триллиона';
  groups[4][4]='триллиона';
 
// копейки
// по умолчанию
  groups[9][-1]={'RUB': 'копеек', 'USD': 'центов', 'EUR': 'центов'};
//исключения
  groups[9][1]={'RUB': 'копейка', 'USD': 'цент', 'EUR': 'цент'};
  groups[9][2]={'RUB': 'копейки', 'USD': 'цента', 'EUR': 'цента'};
  groups[9][3]={'RUB': 'копейки', 'USD': 'цента', 'EUR': 'цента'};
  groups[9][4]={'RUB': 'копейки', 'USD': 'цента', 'EUR': 'цента'};
 
// цифры и числа
// либо просто строка, либо 4 строки в хэше
  var names=new Array();
  names[1]={0: 'один', 1: 'одна', 2: 'один', 3: 'один', 4: 'один'};
  names[2]={0: 'два', 1: 'две', 2: 'два', 3: 'два', 4: 'два'};
  names[3]='три';
  names[4]='четыре';
  names[5]='пять';
  names[6]='шесть';
  names[7]='семь';
  names[8]='восемь';
  names[9]='девять';
  names[10]='десять';
  names[11]='одиннадцать';
  names[12]='двенадцать';
  names[13]='тринадцать';
  names[14]='четырнадцать';
  names[15]='пятнадцать';
  names[16]='шестнадцать';
  names[17]='семнадцать';
  names[18]='восемнадцать';
  names[19]='девятнадцать';
  names[20]='двадцать';
  names[30]='тридцать';
  names[40]='сорок';
  names[50]='пятьдесят';
  names[60]='шестьдесят';
  names[70]='семьдесят';
  names[80]='восемьдесят';
  names[90]='девяносто';
  names[100]='сто';
  names[200]='двести';
  names[300]='триста';
  names[400]='четыреста';
  names[500]='пятьсот';
  names[600]='шестьсот';
  names[700]='семьсот';
  names[800]='восемьсот';
  names[900]='девятьсот';
 
 
  var r='';
  var i,j;
 
  var y=Math.floor(x);
 
// если НЕ ноль рублей
  if (y>0)
  {
  // выделим тройки с руб., тыс., миллионами, миллиардами и триллионами
    var t=new Array();
 
    for (i=0;i<=4;i++)
    {
      t[i]=y%1000;
      y=Math.floor(y/1000);
    }
 
    var d=new Array();
 
  // выделим в каждой тройке сотни, десятки и единицы
    for (i=0;i<=4;i++)
    {
      d[i]=new Array();
      d[i][0]=t[i]%10; // единицы
      d[i][10]=t[i]%100-d[i][0]; // десятки
      d[i][100]=t[i]-d[i][10]-d[i][0]; // сотни
      d[i][11]=t[i]%100; // две правых цифры в виде числа
    }
 
    for (i=4; i>=0; i--)
    {
      if (t[i]>0)
      {
        if (names[d[i][100]])
          r+=' '+ ((typeof(names[d[i][100]])=='object')?(names[d[i][100]][i]):(names[d[i][100]]));
 
        if (names[d[i][11]])
          r+=' '+ ((typeof(names[d[i][11]])=='object')?(names[d[i][11]][i]):(names[d[i][11]]));
        else
        {
          if (names[d[i][10]]) r+=' '+ ((typeof(names[d[i][10]])=='object')?(names[d[i][10]][i]):(names[d[i][10]]));
          if (names[d[i][0]]) r+=' '+ ((typeof(names[d[i][0]])=='object')?(names[d[i][0]][i]):(names[d[i][0]]));
        }
 
        if (names[d[i][11]])  // если существует числительное
          j=d[i][11];
        else
          j=d[i][0];
 
        if (groups[i][j])
        {
          if (i==0)
            r+=' '+groups[i][j][currency];
          else
            r+=' '+groups[i][j];
        }
        else
        {
          if (i==0)
            r+=' '+groups[i][-1][currency];
          else
            r+=' '+groups[i][-1];
        }
      }
    }
 
    if (t[0]==0)
      r+=' '+groups[0][-1][currency];
  }
  else
    r='Ноль '+groups[0][-1][currency];
 
  y=Math.round(((x-Math.floor(x))*100));
  if (y<10) y='0'+y;
 
// r=r.trimMiddle();
//  r=r.substr(0,1).toUpperCase()+r.substr(1);
  r+=' '+y;
 
  y=y*1;
 
  if (names[y])  // если существует числительное
    j=y;
  else
    j=y%10;
 
  if (groups[9][j])
    r+=' '+groups[9][j][currency];
  else
    r+=' '+groups[9][-1][currency];
 
  return r;
    }
 
this.getField("Сумма_пр").value=money2string(parseFloat(event.value));
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 243
Реакции
10 852
Пришлось. Парился в бане ;)
 
Статус
Закрыто для дальнейших ответов.