/*
*****************************************************************************
* ВЫВОД ЧИСЛА (СУММЫ) ПРОПИСЬЮ *
* (С) Roman V Doronin, Март 1994 (перевод на JavaScript Январь 2007) *
*****************************************************************************
*/
//------------------------------------------------------------------------------
// Запись числа прописью
function numberInWords(sum){
// Параметры: sum — сумма (целое число)
// Возврат: число прописью или false-error
sum=Number(Math.round(sum));//-для подстраховки
if (sum>999999999){return false;}//-ожидалось число меньше 1.000.000.000
if (sum==0) return ' ноль';
//переведем число в 9-ти битную строку
var ax='000000000'+String(sum);ax=ax.substr(ax.length-9);
var retVal='';
//сформируем массивы
var listWords={
1:{1:' сто',2:' двести',3:' триста',4:' четыреста',5:' пятьсот',6:' шестьсот',7:' семьсот',8:' восемьсот',9:' девятьсот'},
2:{1:' десять',2:' двадцать',3:' тридцать',4:' сорок',5:' пятьдесят',6:' шестьдесят',7:' семьдесят',8:' восемьдесят',9:' девяносто'},
3:{1:' один',2:' два',3:' три',4:' четыре',5:' пять',6:' шесть',7:' семь',8:' восемь',9:' девять'},
4:{1:' одиннадцать',2:' двенадцать',3:' тринадцать',4:' четырнадцать',5:' пятнадцать',6:' шестнадцать',7:' семнадцать',8:' восемнадцать',9:' девятнадцать'},
5:{1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},
6:{1:'а',2:'и',3:'и',4:'и',5:'',6:'',7:'',8:'',9:''}
};
var listEnding={1:' миллион',2:' тысяч',3:' '};
var arrBit=[0,4,2,1];
//формирование выходной строки
for (i=1;i<4;i++){
bx=ax.substr((i-1)*3,3);
if (Math.round(bx!=0)){
c=0;for (i1=1;i1<4;i1++){if (bx.substr(i1-1,1)!='0') c+=arrBit[i1];}
for (i1=1;i1<4;i1++){
if (bx.substr(i1-1,1)=='0') continue;
if (i==2 && i1==3 && bx.substr(3-1,1)=='1'){retVal+=' одна';continue;}
if (i==2 && i1==3 && bx.substr(3-1,1)=='2'){retVal+=' две';continue;}
if (bx.substr(2-1,1)=='1' && c/2!=Math.round(c/2) && i1==2){retVal+=listWords[4][Math.round(bx.substr(3-1,1))];i1=3;c-=1;continue;}
retVal+=listWords[i1][bx.substr(i1-1,1)];
}
}else if (i!=3) continue;
//-сформируем окончание
if (Math.round(c/2)==c/2){
if (i==1)retVal+=' миллионов';
if (i==2)retVal+=' тысяч';
if (i==3) continue;
}else {
if (i==3) continue;//-пропустим рубли
retVal+=listEnding[i]+listWords[4+i][Math.round(bx.substr(3-1,1))];}
}
return retVal;
}
//------------------------------------------------------------------------------
// Перевод числа в сумму прописью
// Вызов: receiveInWordsSum(<число>[,<тип валюты>][,<флаг вывода дробного числа>][,<флаг вывод с заглавной буквы>])
function receiveInWordsSum(sum){
// Параметры: sum — сумма (число или строковый тип-если дробная часть может оканчиваться на 0)
// сurrency — валюта:
// 0 — рубли (по умолчанию)
// 1 — доллары
// 10 — тонны
// 11 — километры
// 12 — литры
// 13 — штуки
// flagCopeck — флаг вывода с копейками:
// false или 0 — без копеек (по умолчанию)
// 1 — копейки числом
// 2 — копейки прописью (не реализовано)
// flagUpper — true — первый символ переводится в заглавный
// false — подавить перевод первого символа в заглавный (по умолчанию)
// Возврат: сумма прописью в формате сurrency и в зависимости от флага сurrency
var сurrency=arguments[1] || 0;
var flagCopeck=arguments[2] || 0;
var flagUpper=arguments[3] || false;
//массив валют
var listCurrency={
0:{1:'рубл',2:'копе'},
1:{1:'доллар',2:'цент'},
10:{1:'тонн',2:'килограмм'},
11:{1:'километр',2:'метр'},
12:{1:'литр',2:''},
13:{1:'штук',2:''}
};
//-массив окончаний валют
var listEndingCurrency={
0:{0:'ей',1:'ь',2:'я',3:'я',4:'я',5:'ей',6:'ей',7:'ей',8:'ей',9:'ей'},//-рубли
1:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-доллары
10:{0:'',1:'а',2:'ы',3:'ы',4:'ы',5:'',6:'',7:'',8:'',9:''},//-тонны
11:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-километры
12:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-литры
13:{0:'',1:'а',2:'и',3:'и',4:'и',5:'',6:'',7:'',8:'',9:''} //штуки
//1:{0:'',1:'',2:'',3:'',4:'',5:'',6:'',7:'',8:'',9:''},//зарезервировано
};
//-массив окончаний дробных частей валют
var listEndingDenominatorCurrency={
0:{0:'ек',1:'йка',2:'йки',3:'йки',4:'йки',5:'ек',6:'ек',7:'ек',8:'ек',9:'ек'},//-копейки
1:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-центы
10:{0:'',1:'',2:'а',3:'а',4:'а',5:'',6:'',7:'',8:'',9:''},//-килограммы
11:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'}//-метры
12:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-литры
13:{0:'',1:'а',2:'и',3:'и',4:'и',5:'',6:'',7:'',8:'',9:''} //штуки
//1:{0:'',1:'',2:'',3:'',4:'',5:'',6:'',7:'',8:'',9:''},//зарезервировано
};
//формируем выходную строку
if (isNaN(sum)) return '';
sum=String(sum).match(/(\d+)\W*(\d*)/);
if(!sum) return '';
var numerator=sum[1] || 0;
var denominator=sum[2] || '00';
//сформируем целую часть
var retVal=numberInWords(numerator)+' '+listCurrency[сurrency][1]+listEndingCurrency[сurrency][Number(String(numerator.substr(numerator.length-1,1)))];
//формируем дробную часть
if (flagCopeck==1 && listCurrency[сurrency][2]) retVal+=' '+denominator+' '+listCurrency[сurrency][2]+listEndingDenominatorCurrency[сurrency][Number(String(denominator.substr(denominator.length-1,1)))];
//Переведем первую букву в заглавную
if (flagUpper){
retVal=firstSymbolToUpper(retVal);
}
return retVal;
}
//------------------------------------------------------------------------------
// Начинает предложение с большой буквы
function firstSymbolToUpper(val){
//Параметры: val — обрабатываемая строка
//Возвращает: полученную строку val в которой первый символ переведен в заглавный
return val.substr(1,1).toUpperCase()+val.substr(2);
}
*****************************************************************************
* ВЫВОД ЧИСЛА (СУММЫ) ПРОПИСЬЮ *
* (С) Roman V Doronin, Март 1994 (перевод на JavaScript Январь 2007) *
*****************************************************************************
*/
//------------------------------------------------------------------------------
// Запись числа прописью
function numberInWords(sum){
// Параметры: sum — сумма (целое число)
// Возврат: число прописью или false-error
sum=Number(Math.round(sum));//-для подстраховки
if (sum>999999999){return false;}//-ожидалось число меньше 1.000.000.000
if (sum==0) return ' ноль';
//переведем число в 9-ти битную строку
var ax='000000000'+String(sum);ax=ax.substr(ax.length-9);
var retVal='';
//сформируем массивы
var listWords={
1:{1:' сто',2:' двести',3:' триста',4:' четыреста',5:' пятьсот',6:' шестьсот',7:' семьсот',8:' восемьсот',9:' девятьсот'},
2:{1:' десять',2:' двадцать',3:' тридцать',4:' сорок',5:' пятьдесят',6:' шестьдесят',7:' семьдесят',8:' восемьдесят',9:' девяносто'},
3:{1:' один',2:' два',3:' три',4:' четыре',5:' пять',6:' шесть',7:' семь',8:' восемь',9:' девять'},
4:{1:' одиннадцать',2:' двенадцать',3:' тринадцать',4:' четырнадцать',5:' пятнадцать',6:' шестнадцать',7:' семнадцать',8:' восемнадцать',9:' девятнадцать'},
5:{1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},
6:{1:'а',2:'и',3:'и',4:'и',5:'',6:'',7:'',8:'',9:''}
};
var listEnding={1:' миллион',2:' тысяч',3:' '};
var arrBit=[0,4,2,1];
//формирование выходной строки
for (i=1;i<4;i++){
bx=ax.substr((i-1)*3,3);
if (Math.round(bx!=0)){
c=0;for (i1=1;i1<4;i1++){if (bx.substr(i1-1,1)!='0') c+=arrBit[i1];}
for (i1=1;i1<4;i1++){
if (bx.substr(i1-1,1)=='0') continue;
if (i==2 && i1==3 && bx.substr(3-1,1)=='1'){retVal+=' одна';continue;}
if (i==2 && i1==3 && bx.substr(3-1,1)=='2'){retVal+=' две';continue;}
if (bx.substr(2-1,1)=='1' && c/2!=Math.round(c/2) && i1==2){retVal+=listWords[4][Math.round(bx.substr(3-1,1))];i1=3;c-=1;continue;}
retVal+=listWords[i1][bx.substr(i1-1,1)];
}
}else if (i!=3) continue;
//-сформируем окончание
if (Math.round(c/2)==c/2){
if (i==1)retVal+=' миллионов';
if (i==2)retVal+=' тысяч';
if (i==3) continue;
}else {
if (i==3) continue;//-пропустим рубли
retVal+=listEnding[i]+listWords[4+i][Math.round(bx.substr(3-1,1))];}
}
return retVal;
}
//------------------------------------------------------------------------------
// Перевод числа в сумму прописью
// Вызов: receiveInWordsSum(<число>[,<тип валюты>][,<флаг вывода дробного числа>][,<флаг вывод с заглавной буквы>])
function receiveInWordsSum(sum){
// Параметры: sum — сумма (число или строковый тип-если дробная часть может оканчиваться на 0)
// сurrency — валюта:
// 0 — рубли (по умолчанию)
// 1 — доллары
// 10 — тонны
// 11 — километры
// 12 — литры
// 13 — штуки
// flagCopeck — флаг вывода с копейками:
// false или 0 — без копеек (по умолчанию)
// 1 — копейки числом
// 2 — копейки прописью (не реализовано)
// flagUpper — true — первый символ переводится в заглавный
// false — подавить перевод первого символа в заглавный (по умолчанию)
// Возврат: сумма прописью в формате сurrency и в зависимости от флага сurrency
var сurrency=arguments[1] || 0;
var flagCopeck=arguments[2] || 0;
var flagUpper=arguments[3] || false;
//массив валют
var listCurrency={
0:{1:'рубл',2:'копе'},
1:{1:'доллар',2:'цент'},
10:{1:'тонн',2:'килограмм'},
11:{1:'километр',2:'метр'},
12:{1:'литр',2:''},
13:{1:'штук',2:''}
};
//-массив окончаний валют
var listEndingCurrency={
0:{0:'ей',1:'ь',2:'я',3:'я',4:'я',5:'ей',6:'ей',7:'ей',8:'ей',9:'ей'},//-рубли
1:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-доллары
10:{0:'',1:'а',2:'ы',3:'ы',4:'ы',5:'',6:'',7:'',8:'',9:''},//-тонны
11:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-километры
12:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-литры
13:{0:'',1:'а',2:'и',3:'и',4:'и',5:'',6:'',7:'',8:'',9:''} //штуки
//1:{0:'',1:'',2:'',3:'',4:'',5:'',6:'',7:'',8:'',9:''},//зарезервировано
};
//-массив окончаний дробных частей валют
var listEndingDenominatorCurrency={
0:{0:'ек',1:'йка',2:'йки',3:'йки',4:'йки',5:'ек',6:'ек',7:'ек',8:'ек',9:'ек'},//-копейки
1:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-центы
10:{0:'',1:'',2:'а',3:'а',4:'а',5:'',6:'',7:'',8:'',9:''},//-килограммы
11:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'}//-метры
12:{0:'ов',1:'',2:'а',3:'а',4:'а',5:'ов',6:'ов',7:'ов',8:'ов',9:'ов'},//-литры
13:{0:'',1:'а',2:'и',3:'и',4:'и',5:'',6:'',7:'',8:'',9:''} //штуки
//1:{0:'',1:'',2:'',3:'',4:'',5:'',6:'',7:'',8:'',9:''},//зарезервировано
};
//формируем выходную строку
if (isNaN(sum)) return '';
sum=String(sum).match(/(\d+)\W*(\d*)/);
if(!sum) return '';
var numerator=sum[1] || 0;
var denominator=sum[2] || '00';
//сформируем целую часть
var retVal=numberInWords(numerator)+' '+listCurrency[сurrency][1]+listEndingCurrency[сurrency][Number(String(numerator.substr(numerator.length-1,1)))];
//формируем дробную часть
if (flagCopeck==1 && listCurrency[сurrency][2]) retVal+=' '+denominator+' '+listCurrency[сurrency][2]+listEndingDenominatorCurrency[сurrency][Number(String(denominator.substr(denominator.length-1,1)))];
//Переведем первую букву в заглавную
if (flagUpper){
retVal=firstSymbolToUpper(retVal);
}
return retVal;
}
//------------------------------------------------------------------------------
// Начинает предложение с большой буквы
function firstSymbolToUpper(val){
//Параметры: val — обрабатываемая строка
//Возвращает: полученную строку val в которой первый символ переведен в заглавный
return val.substr(1,1).toUpperCase()+val.substr(2);
}