13.08.2013, 18:54
|
Аспирант
|
|
Регистрация: 01.06.2013
Сообщений: 48
|
|
Сумма прописью
Есть рабочий (проверено) скрипт суммы прописью. В этом скрипте строка прописи начинается с маленькой буквы,а надо чтобы с большой. Подскажите где вставить toUpperCase(),чтобы первая буква была заглавной.
function number_to_string(_number) {
var _arr_numbers = new Array();
_arr_numbers[1] = new Array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
_arr_numbers[2] = new Array('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
_arr_numbers[3] = new Array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
function number_parser(_num, _desc) {
var _string = '';
var _num_hundred = '';
if (_num.length == 3) {
_num_hundred = _num.substr(0, 1);
_num = _num.substr(1, 3);
_string = _arr_numbers[3][_num_hundred] + ' ';
}
if (_num < 20) _string += _arr_numbers[1][parseFloat(_num)] + ' ';
else {
var _first_num = _num.substr(0, 1);
var _second_num = _num.substr(1, 2);
_string += _arr_numbers[2][_first_num] + ' ' + _arr_numbers[1][_second_num] + ' ';
}
switch (_desc){
case 0:
var _last_num = parseFloat(_num.substr(-1));
if (_last_num == 1) _string += 'рубль';
else if (_last_num > 1 && _last_num < 5) _string += 'рубля';
else _string += 'рублей';
break;
case 1:
var _last_num = parseFloat(_num.substr(-1));
if (_last_num == 1) _string += 'тысяча ';
else if (_last_num > 1 && _last_num < 5) _string += 'тысячи ';
else _string += 'тысяч ';
_string = _string.replace('один ', 'одна ');
_string = _string.replace('два ', 'две ');
break;
case 2:
var _last_num = parseFloat(_num.substr(-1));
if (_last_num == 1) _string += 'миллион ';
else if (_last_num > 1 && _last_num < 5) _string += 'миллиона ';
else _string += 'миллионов ';
break;
case 3:
var _last_num = parseFloat(_num.substr(-1));
if (_last_num == 1) _string += 'миллиард ';
else if (_last_num > 1 && _last_num < 5) _string += 'миллиарда ';
else _string += 'миллиардов ';
break;
}
_string = _string.replace(' ', ' ');
return _string;
}
function decimals_parser(_num) {
var _first_num = _num.substr(0, 1);
var _second_num = parseFloat(_num.substr(1, 2));
var _string = ' ' + _first_num + _second_num;
if (_second_num == 1) _string += ' копейка';
else if (_second_num > 1 && _second_num < 5) _string += ' копейки';
else _string += ' копеек';
return _string;
}
if (!_number || _number == 0) return false;
if (typeof _number !== 'number') {
_number = _number.replace(',', '.');
_number = parseFloat(_number);
if (isNaN(_number)) return false;
}
_number = _number.toFixed(2);
if(_number.indexOf('.') != -1) {
var _number_arr = _number.split('.');
var _number = _number_arr[0];
var _number_decimals = _number_arr[1];
}
var _number_length = _number.length;
var _string = '';
var _num_parser = '';
var _count = 0;
for (var _p = (_number_length - 1); _p >= 0; _p--) {
var _num_digit = _number.substr(_p, 1);
_num_parser = _num_digit + _num_parser;
if ((_num_parser.length == 3 || _p == 0) && !isNaN(parseFloat(_num_parser))) {
_string = number_parser(_num_parser, _count) + _string;
_num_parser = '';
_count++;
}
}
if (_number_decimals) _string += decimals_parser(_number_decimals);
return _string;
}
this.getField("Сумма_пр").value = number_to_string(event.value)+"."
|
|
13.08.2013, 19:12
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
var str = 'бла бла';
str = str.charAt(0).toUpperCase() + str.substring(1);
alert(str)
|
|
13.08.2013, 19:32
|
Аспирант
|
|
Регистрация: 01.06.2013
Сообщений: 48
|
|
Благодарю Вас за быстрый ответ. Но как ответил Чапаев Петьке на вопрос "... а в мировом масштабе Василий Иванович ?" ответ "нет Петька, языкам не обучен." Ну а если серьезно, то специалисту я думаю легко конкретно в самом коде вставить toUpperCase(). Не сочтите за труд. Строка же сформирована.
|
|
13.08.2013, 21:06
|
Аспирант
|
|
Регистрация: 01.06.2013
Сообщений: 48
|
|
Специально для таких как я Чапаевых. В конце кода, перед return _string, надо вставить
_string = _string.charAt(0).toUpperCase() + _string.substring(1);
и все получится. 10 минут экспериментов и все получилось.
|
|
16.08.2013, 16:55
|
Аспирант
|
|
Регистрация: 01.06.2013
Сообщений: 48
|
|
Ошибки в формуле
В функции есть ошибки. Надо ее дорабатывать. Ошибки можно выявить на суммах:12 рублей, 12 000.00, 2 000 000.00, 12 000 001,00 и т.д.
|
|
16.08.2013, 17:33
|
Аспирант
|
|
Регистрация: 01.06.2013
Сообщений: 48
|
|
А вот эта работает вроде бы нормально, если кому надо.
var mapNumbers = {
0 : [2, 1, "ноль"],
1 : [0, 2, "один", "одна"],
2 : [1, 2, "два", "две"],
3 : [1, 1, "три"],
4 : [1, 1, "четыре"],
5 : [2, 1, "пять"],
6 : [2, 1, "шесть"],
7 : [2, 1, "семь"],
8 : [2, 1, "восемь"],
9 : [2, 1, "девять"],
10 : [2, 1, "десять"],
11 : [2, 1, "одиннадцать"],
12 : [2, 1, "двенадцать"],
13 : [2, 1, "тринадцать"],
14 : [2, 1, "четырнадцать"],
15 : [2, 1, "пятнадцать"],
16 : [2, 1, "шестнадцать"],
17 : [2, 1, "семнадцать"],
18 : [2, 1, "восемнадцать"],
19 : [2, 1, "девятнадцать"],
20 : [2, 1, "двадцать"],
30 : [2, 1, "тридцать"],
40 : [2, 1, "сорок"],
50 : [2, 1, "пятьдесят"],
60 : [2, 1, "шестьдесят"],
70 : [2, 1, "семьдесят"],
80 : [2, 1, "восемьдесят"],
90 : [2, 1, "девяносто"],
100 : [2, 1, "сто"],
200 : [2, 1, "двести"],
300 : [2, 1, "триста"],
400 : [2, 1, "четыреста"],
500 : [2, 1, "пятьсот"],
600 : [2, 1, "шестьсот"],
700 : [2, 1, "семьсот"],
800 : [2, 1, "восемьсот"],
900 : [2, 1, "девятьсот"]
};
var mapOrders = [
{ _Gender : true, _arrStates : ["рубль", "рубля", "рублей"] },
{ _Gender : false, _arrStates : ["тысяча", "тысячи", "тысяч"] },
{ _Gender : true, _arrStates : ["миллион", "миллиона", "миллионов"] },
{ _Gender : true, _arrStates : ["миллиард", "миллиарда", "миллиардов"] },
{ _Gender : true, _arrStates : ["триллион", "триллиона", "триллионов"] }
];
var objKop = { _Gender : false, _arrStates : ["копейка", "копейки", "копеек"] };
function Value(dVal, bGender) {
var xVal = mapNumbers[dVal];
if (xVal[1] == 1) {
return xVal[2];
} else {
return xVal[2 + (bGender ? 0 : 1)];
}
}
function From0To999(fValue, oObjDesc, fnAddNum, fnAddDesc)
{
var nCurrState = 2;
if (Math.floor(fValue/100) > 0) {
var fCurr = Math.floor(fValue/100)*100;
fnAddNum(Value(fCurr, oObjDesc._Gender));
nCurrState = mapNumbers[fCurr][0];
fValue -= fCurr;
}
if (fValue < 20) {
if (Math.floor(fValue) > 0) {
fnAddNum(Value(fValue, oObjDesc._Gender));
nCurrState = mapNumbers[fValue][0];
}
} else {
var fCurr = Math.floor(fValue/10)*10;
fnAddNum(Value(fCurr, oObjDesc._Gender));
nCurrState = mapNumbers[fCurr][0];
fValue -= fCurr;
if (Math.floor(fValue) > 0) {
fnAddNum(Value(fValue, oObjDesc._Gender));
nCurrState = mapNumbers[fValue][0];
}
}
fnAddDesc(oObjDesc._arrStates[nCurrState]);
}
function FloatToSamplesInWordsRus(fAmount)
{
var fInt = Math.floor(fAmount + 0.005);
var fDec = Math.floor(((fAmount - fInt) * 100) + 0.5);
var arrRet = [];
var iOrder = 0;
var arrThousands = [];
for (; fInt > 0.9999; fInt/=1000) {
arrThousands.push(Math.floor(fInt % 1000));
}
if (arrThousands.length == 0) {
arrThousands.push(0);
}
function PushToRes(strVal) {
arrRet.push(strVal);
}
for (var iSouth = arrThousands.length-1; iSouth >= 0; --iSouth) {
if (arrThousands[iSouth] == 0) {
continue;
}
From0To999(arrThousands[iSouth], mapOrders[iSouth], PushToRes, PushToRes);
}
if (arrThousands[0] == 0) {
// Handle zero amount
if (arrThousands.length == 1) {
PushToRes(Value(0, mapOrders[0]._Gender));
}
var nCurrState = 2;
PushToRes(mapOrders[0]._arrStates[nCurrState]);
}
if (arrRet.length > 0) {
// Capitalize first letter
arrRet[0] = arrRet[0].match(/^(.)/)[1].toLocaleUpperCase() + arrRet[0].match(/^.(.*)$/)[1];
}
arrRet.push((fDec < 10) ? ("0" + fDec) : ("" + fDec));
From0To999(fDec, objKop, function() {}, PushToRes);
return arrRet.join(" ");
}
this.getField("Сумма_пр").value = FloatToSamplesInWordsRus(parseFloat(event.value))+".";
|
|
16.09.2013, 04:47
|
Новичок на форуме
|
|
Регистрация: 16.09.2013
Сообщений: 1
|
|
Еще один конвертер
Последний раз редактировалось javadev, 15.06.2018 в 10:33.
|
|
17.11.2013, 21:20
|
Новичок на форуме
|
|
Регистрация: 17.11.2013
Сообщений: 1
|
|
"Допилил" фунцию, которую сам же писал еще 4 года назад. Функция, которая в первом сообщении Сумма прописью
Спасибо BSI, исправил его замечания:
Цитата:
|
Ошибки можно выявить на суммах:12 рублей, 12 000.00, 2 000 000.00, 12 000 001,00 и т.д.
|
Заодно добавил prototype на всякий случай. Поучилось так:
function numberToString(_number, toUpper) {
var toUpper = toUpper || false;
var _arr_numbers = new Array();
_arr_numbers[1] = new Array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
_arr_numbers[2] = new Array('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
_arr_numbers[3] = new Array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
function number_parser(_num, _desc) {
var _string = '';
var _num_hundred = '';
if (_num.length == 3) {
_num_hundred = _num.substr(0, 1);
_num = _num.substr(1, 3);
_string = _arr_numbers[3][_num_hundred] + ' ';
}
if (_num < 20) _string += _arr_numbers[1][parseFloat(_num)] + ' ';
else {
var _first_num = _num.substr(0, 1);
var _second_num = _num.substr(1, 2);
_string += _arr_numbers[2][_first_num] + ' ' + _arr_numbers[1][_second_num] + ' ';
}
switch (_desc){
case 0:
if (_num.length == 2 && parseFloat(_num.substr(0,1)) == 1) {
_string += 'рублей';
break;
}
var _last_num = parseFloat(_num.substr(-1));
if (_last_num == 1) _string += 'рубль';
else if (_last_num > 1 && _last_num < 5) _string += 'рубля';
else _string += 'рублей';
break;
case 1:
_num = _num.replace(/^[0]{1,}$/g, '0');
if (_num.length == 2 && parseFloat(_num.substr(0,1)) == 1) {
_string += 'тысяч ';
break;
}
var _last_num = parseFloat(_num.substr(-1));
if (_last_num == 1) _string += 'тысяча ';
else if (_last_num > 1 && _last_num < 5) _string += 'тысячи ';
else if (parseFloat(_num) > 0) _string += 'тысяч ';
_string = _string.replace('один ', 'одна ');
_string = _string.replace('два ', 'две ');
break;
case 2:
_num = _num.replace(/^[0]{1,}$/g, '0');
if (_num.length == 2 && parseFloat(_num.substr(0,1)) == 1) {
_string += 'миллионов ';
break;
}
var _last_num = parseFloat(_num.substr(-1));
if (_last_num == 1) _string += 'миллион ';
else if (_last_num > 1 && _last_num < 5) _string += 'миллиона ';
else if (parseFloat(_num) > 0) _string += 'миллионов ';
break;
case 3:
_num = _num.replace(/^[0]{1,}$/g, '0');
if (_num.length == 2 && parseFloat(_num.substr(0,1)) == 1) {
_string += 'миллиардов ';
break;
}
var _last_num = parseFloat(_num.substr(-1));
if (_last_num == 1) _string += 'миллиард ';
else if (_last_num > 1 && _last_num < 5) _string += 'миллиарда ';
else if (parseFloat(_num) > 0) _string += 'миллиардов ';
break;
}
return _string;
}
function decimals_parser(_num) {
var _first_num = _num.substr(0, 1);
var _second_num = parseFloat(_num.substr(1, 2));
var _string = ' ' + _first_num + _second_num;
if (_second_num == 1) _string += ' копейка';
else if (_second_num > 1 && _second_num < 5) _string += ' копейки';
else _string += ' копеек';
return _string;
}
if (!_number || _number == 0) return false;
if (typeof _number !== 'number') {
_number = _number + '';
_number = _number.replace(',', '.');
_number = parseFloat(_number);
if (isNaN(_number)) return false;
}
_number = _number.toFixed(2);
if(_number.indexOf('.') != -1) {
var _number_arr = _number.split('.');
var _number = _number_arr[0];
var _number_decimals = _number_arr[1];
}
var _number_length = _number.length;
var _string = '';
var _num_parser = '';
var _count = 0;
for (var _p = (_number_length - 1); _p >= 0; _p--) {
var _num_digit = _number.substr(_p, 1);
_num_parser = _num_digit + _num_parser;
if ((_num_parser.length == 3 || _p == 0) && !isNaN(parseFloat(_num_parser))) {
_string = number_parser(_num_parser, _count) + _string;
_num_parser = '';
_count++;
}
}
if (_number_decimals) _string += decimals_parser(_number_decimals);
if (toUpper === true || toUpper == 'upper') {
_string = _string.substr(0,1).toUpperCase() + _string.substr(1);
}
return _string.replace(/[\s]{1,}/g, ' ');
};
Number.prototype.numberToString = function(toUpper) {
return numberToString(this, toUpper);
};
String.prototype.numberToString = function(toUpper) {
return numberToString(this, toUpper);
};
Ах, да, добавил то, о чем, собственно, просили Теперь можно указать со строчной или прописной буквы выводить строку. По-умолчанию выводится как и раньше, с прописной; если указать второй параметр (значения либо true, либо 'upper'), то строка начнется с прописной буквы.
Примеры:
var number = 12500;
number.numberToString(true);
// Двенадцать тысяч пятьсот рублей 00 копеек
var number = 12000.5;
number.numberToString();
// двенадцать тысяч рублей 50 копеек
var number = 2000000;
numberToString(number, true);
// Два миллиона рублей 00 копеек
var number = '11'; // Строка, не число (:
numberToString(number);
// одиннадцать рублей 00 копеек
|
|
06.01.2014, 22:26
|
Новичок на форуме
|
|
Регистрация: 06.01.2014
Сообщений: 2
|
|
Все равно не работает. Я на свежую голову исправил Вашу функцию.
function number_to_string(_number) {
var _arr_numbers = new Array();
_arr_numbers[1] = new Array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
_arr_numbers[2] = new Array('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
_arr_numbers[3] = new Array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
function number_parser(_num, _desc) {
var _string = '';
var _num_hundred = '';
if (_num.length == 3) {
_num_hundred = _num.substr(0, 1);
_num = _num.substr(1, 3);
_string = _arr_numbers[3][_num_hundred] + ' ';
}
if (_num < 20) _string += _arr_numbers[1][parseFloat(_num)] + ' ';
else {
var _first_num = _num.substr(0, 1);
var _second_num = _num.substr(1, 2);
_string += _arr_numbers[2][_first_num] + ' ' + _arr_numbers[1][_second_num] + ' ';
}
switch (_desc){
case 0:
var _last_num = parseFloat(_num.substr(-1));
var pre_last_num = _num.substr(-2);
pre_last_num = pre_last_num.split("");
var _pre_last_num = parseFloat(pre_last_num[0]);
if (_last_num == 1 && 1!=_pre_last_num) _string += 'рубль';
else if (_last_num == 1 && 1 == pre_last_num.length) _string += 'рубль';
else if (_last_num > 1 && _last_num < 5 && 1!=_pre_last_num) _string += 'рубля';
else if (pre_last_num.length > 1) _string += 'рублей';
else if (pre_last_num.length = 1 && _last_num > 4) _string += 'рублей';
else if (pre_last_num.length = 1 && 0 == _last_num) _string += 'Ноль рублей';
else _string += 'рубль';
break;
case 1:
var _last_num = parseFloat(_num.substr(-1));
var pre_last_num = _num.substr(-2);
pre_last_num = pre_last_num.split("");
var _pre_last_num = parseFloat(pre_last_num[0]);
if (_last_num == 1 && 1!=_pre_last_num) _string += 'тысяча ';
else if (_last_num == 1 && 1 == pre_last_num.length) _string += 'тысяча ';
else if (_last_num > 1 && _last_num < 5 && 1!=_pre_last_num) _string += 'тысячи ';
else _string += 'тысяч ';
_string = _string.replace('один ', 'одна ');
_string = _string.replace('два ', 'две ');
break;
case 2:
var _last_num = parseFloat(_num.substr(-1));
var pre_last_num = _num.substr(-2);
pre_last_num = pre_last_num.split("");
var _pre_last_num = parseFloat(pre_last_num[0]);
if (_last_num == 1 && 1!=_pre_last_num) _string += 'миллион ';
else if (_last_num == 1 && 1 == pre_last_num.length) _string += 'миллион ';
else if (_last_num > 1 && _last_num < 5 && 1!=_pre_last_num) _string += 'миллиона ';
else _string += 'миллионов ';
break;
case 3:
var _last_num = parseFloat(_num.substr(-1));
var pre_last_num = _num.substr(-2);
pre_last_num = pre_last_num.split("");
var _pre_last_num = parseFloat(pre_last_num[0]);
if (_last_num == 1 && 1!=_pre_last_num) _string += 'миллиард ';
else if (_last_num == 1 && 1 == pre_last_num.length) _string += 'миллиард ';
else if (_last_num > 1 && _last_num < 5 && 1!=_pre_last_num) _string += 'миллиарда ';
else _string += 'миллиардов ';
break;
}
_string = _string.replace(' ', ' ');
return _string;
}
function decimals_parser(_num) {
var _first_num = _num.substr(0, 1);
var _second_num = parseFloat(_num.substr(1, 2));
var _string = ' ' + _first_num + _second_num;
if (_second_num == 1 && 1 != _first_num) _string += ' копейка';
else if (_second_num > 1 && _second_num < 5 && 1 != _first_num) _string += ' копейки';
else _string += ' копеек';
return _string;
}
if (!_number || _number == 0) return 'Ноль рублей';
if (typeof _number !== 'number') {
_number = _number.replace(',', '.');
_number = parseFloat(_number);
if (isNaN(_number)) return 'Ноль рублей';
}
_number = _number.toFixed(2);
if(_number.indexOf('.') != -1) {
var _number_arr = _number.split('.');
var _number = _number_arr[0];
var _number_decimals = _number_arr[1];
}
var _number_length = _number.length;
var _string = '';
var _num_parser = '';
var _count = 0;
for (var _p = (_number_length - 1); _p >= 0; _p--) {
var _num_digit = _number.substr(_p, 1);
_num_parser = _num_digit + _num_parser;
if ((_num_parser.length == 3 || _p == 0) && !isNaN(parseFloat(_num_parser))) {
_string = number_parser(_num_parser, _count) + _string;
_num_parser = '';
_count++;
}
}
if (_number_decimals) _string += decimals_parser(_number_decimals);
_string=_string.charAt(0).toUpperCase() + _string.substr(1).toLowerCase();
return _string;
}
|
|
11.05.2014, 20:04
|
Новичок на форуме
|
|
Регистрация: 06.01.2014
Сообщений: 2
|
|
Оказалось, что для IE нужно так:
function number_to_string(_number) {
var _arr_numbers = new Array();
_arr_numbers[1] = new Array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
_arr_numbers[2] = new Array('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
_arr_numbers[3] = new Array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
function number_parser(_num, _desc) {
var _string = '';
var _num_hundred = '';
if (_num.length == 3) {
_num_hundred = _num.substr(0, 1);
_num = _num.substr(1, 3);
_string = _arr_numbers[3][_num_hundred] + ' ';
}
if (_num < 20) _string += _arr_numbers[1][parseFloat(_num)] + ' ';
else {
var _first_num = _num.substr(0, 1);
var _second_num = _num.substr(1, 2);
_string += _arr_numbers[2][_first_num] + ' ' + _arr_numbers[1][_second_num] + ' ';
}
switch (_desc){
case 0:
var last = _num.length - 1;
var _last_num = parseFloat(_num.charAt(last));
var _slice_num = _num.slice(0, -1);
var _pre_last_num = parseFloat(_slice_num);
if (_last_num == 1 && 1 != _pre_last_num) _string += 'рубль';
else if (_last_num > 1 && _last_num < 5 && 1 != _pre_last_num) _string += 'рубля';
else if ("" != _slice_num) _string += 'рублей';
else if (1 == _pre_last_num) _string += 'рублей';
else if ("" != _slice_num && _last_num > 4) _string += 'рублей';
else if ("" == _slice_num && _last_num > 4) _string += 'рублей';
else if ("" == _slice_num && 0 == _last_num) _string += 'Ноль рублей';
else _string += 'рубль';
break;
case 1:
var _last_num = parseFloat(_num.substr(-1));
var last = _num.length - 1;
var _last_num = parseFloat(_num.charAt(last));
var _slice_num = _num.slice(0, -1);
var _pre_last_num = parseFloat(_slice_num);
if (_last_num == 1 && 1 != _pre_last_num) _string += 'тысяча ';
else if (_last_num == 1 && 1 == _pre_last_num.toString().length) _string += 'тысяча ';
else if (_last_num > 1 && _last_num < 5 && 1 != _pre_last_num) _string += 'тысячи ';
else _string += 'тысяч ';
_string = _string.replace('один ', 'одна ');
_string = _string.replace('два ', 'две ');
break;
case 2:
var _last_num = parseFloat(_num.substr(-1));
var last = _num.length - 1;
var _last_num = parseFloat(_num.charAt(last));
var _slice_num = _num.slice(0, -1);
var _pre_last_num = parseFloat(_slice_num);
if (_last_num == 1 && 1 != _pre_last_num) _string += 'миллион ';
else if (_last_num == 1 && 1 == _pre_last_num.toString().length) _string += 'миллион ';
else if (_last_num > 1 && _last_num < 5 && 1 != _pre_last_num) _string += 'миллиона ';
else _string += 'миллионов ';
break;
case 3:
var _last_num = parseFloat(_num.substr(-1));
var last = _num.length - 1;
var _last_num = parseFloat(_num.charAt(last));
var _slice_num = _num.slice(0, -1);
var _pre_last_num = parseFloat(_slice_num);
if (_last_num == 1 && 1 != _pre_last_num) _string += 'миллиард ';
else if (_last_num == 1 && 1 == _pre_last_num.toString().length) _string += 'миллиард ';
else if (_last_num > 1 && _last_num < 5 && 1 != _pre_last_num) _string += 'миллиарда ';
else _string += 'миллиардов ';
break;
}
_string = _string.replace(' ', ' ');
return _string;
}
function decimals_parser(_num) {
var _first_num = _num.substr(0, 1);
var _second_num = parseFloat(_num.substr(1, 2));
var _string = ' ' + _first_num + _second_num;
if (_second_num == 1 && 1 != _first_num) _string += ' копейка';
else if (_second_num > 1 && _second_num < 5 && 1 != _first_num) _string += ' копейки';
else _string += ' копеек';
return _string;
}
if (!_number || _number == 0) return 'Ноль рублей';
if (typeof _number !== 'number') {
_number = _number.replace(',', '.');
_number = parseFloat(_number);
if (isNaN(_number)) return 'Ноль рублей';
}
_number = _number.toFixed(2);
if(_number.indexOf('.') != -1) {
var _number_arr = _number.split('.');
var _number = _number_arr[0];
var _number_decimals = _number_arr[1];
}
var _number_length = _number.length;
var _string = '';
var _num_parser = '';
var _count = 0;
for (var _p = (_number_length - 1); _p >= 0; _p--) {
var _num_digit = _number.substr(_p, 1);
_num_parser = _num_digit + _num_parser;
if ((_num_parser.length == 3 || _p == 0) && !isNaN(parseFloat(_num_parser))) {
_string = number_parser(_num_parser, _count) + _string;
_num_parser = '';
_count++;
}
}
if (_number_decimals) _string += decimals_parser(_number_decimals);
_string=_string.charAt(0).toUpperCase() + _string.substr(1).toLowerCase();
return _string;
}
|
|
|
|