Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.08.2013, 18:54
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 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)+"."
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2013, 19:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

var str = 'бла бла';

str = str.charAt(0).toUpperCase() + str.substring(1);

alert(str)
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2013, 19:32
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 01.06.2013
Сообщений: 48

Благодарю Вас за быстрый ответ. Но как ответил Чапаев Петьке на вопрос "... а в мировом масштабе Василий Иванович ?" ответ "нет Петька, языкам не обучен." Ну а если серьезно, то специалисту я думаю легко конкретно в самом коде вставить toUpperCase(). Не сочтите за труд. Строка же сформирована.
Ответить с цитированием
  #4 (permalink)  
Старый 13.08.2013, 21:06
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 01.06.2013
Сообщений: 48

Специально для таких как я Чапаевых. В конце кода, перед return _string, надо вставить
_string = _string.charAt(0).toUpperCase() + _string.substring(1);
и все получится. 10 минут экспериментов и все получилось.
Ответить с цитированием
  #5 (permalink)  
Старый 16.08.2013, 16:55
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 01.06.2013
Сообщений: 48

Ошибки в формуле
В функции есть ошибки. Надо ее дорабатывать. Ошибки можно выявить на суммах:12 рублей, 12 000.00, 2 000 000.00, 12 000 001,00 и т.д.
Ответить с цитированием
  #6 (permalink)  
Старый 16.08.2013, 17:33
BSI BSI вне форума
Аспирант
Отправить личное сообщение для BSI Посмотреть профиль Найти все сообщения от BSI
 
Регистрация: 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))+".";
Ответить с цитированием
  #7 (permalink)  
Старый 16.09.2013, 04:47
Новичок на форуме
Отправить личное сообщение для javadev Посмотреть профиль Найти все сообщения от javadev
 
Регистрация: 16.09.2013
Сообщений: 1

Еще один конвертер
https://github.com/javadev/moneytost.../moneytostr.js

Последний раз редактировалось javadev, 15.06.2018 в 10:33.
Ответить с цитированием
  #8 (permalink)  
Старый 17.11.2013, 21:20
Новичок на форуме
Отправить личное сообщение для ovsyannikov Посмотреть профиль Найти все сообщения от ovsyannikov
 
Регистрация: 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 копеек
Ответить с цитированием
  #9 (permalink)  
Старый 06.01.2014, 22:26
Новичок на форуме
Отправить личное сообщение для ilja172 Посмотреть профиль Найти все сообщения от ilja172
 
Регистрация: 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;
}
Ответить с цитированием
  #10 (permalink)  
Старый 11.05.2014, 20:04
Новичок на форуме
Отправить личное сообщение для ilja172 Посмотреть профиль Найти все сообщения от ilja172
 
Регистрация: 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;
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма квадратов. henry1412 Internet Explorer 3 04.06.2013 21:14
Сумма вещественных чисел vaskon Общие вопросы Javascript 4 14.02.2013 11:02
сумма массива arahmanov Серверные языки и технологии 2 12.02.2013 17:55
Сумма вычитания в таблице mishanay Events/DOM/Window 5 14.01.2012 16:18
Сумма value динамически создаваемых input'ов (jQuery) Tazeg Элементы интерфейса 7 19.09.2011 23:22