neowaring
@neowaring
Разработчик неизвестных систем

Почему копейки не отображаются текстом?

Кто подскажет почему копейки не выводятся прописью ? для них же имеется функция

https://codepen.io/neowaring/pen/YzGMJmj

spoiler
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(" ");
		}
		
		//Вывод суммы прописью
		document.write(FloatToSamplesInWordsRus(parseFloat(10.30)) + '<br>');
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
From0To999(fDec, objKop, PushToRes, PushToRes);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы