UNPKG

hryvnias

Version:

Вартість прописом

203 lines (169 loc) 4.36 kB
;(function () { 'use strict' var words = [ [ '', 'один', 'два', 'три', 'чотири', "п'ять", 'шість', 'сім', 'вісім', "дев'ять", 'десять', 'одинадцять', 'дванадцять', 'тринадцять', 'чотирнадцять', "п'ятнадцять", 'шістнадцять', 'сімнадцять', 'вісімнадцять', "дев'ятнадцять" ], [ '', '', 'двадцять', 'тридцять', 'сорок', "п'ятдесят", 'шістдесят', 'сімдесят', 'вісімдесят', "дев'яносто" ], [ '', 'сто', 'двісті', 'триста', 'чотириста', "п'ятсот", 'шістсот', 'сімсот', 'вісімсот', "дев'ятсот" ] ] var toFloat = function (number) { return parseFloat(number) } var plural = function (count, options) { if (options.length !== 3) { return false } count = Math.abs(count) % 100 var rest = count % 10 if (count > 10 && count < 20) { return options[2] } if (rest > 1 && rest < 5) { return options[1] } if (rest === 1) { return options[0] } return options[2] } var parseNumber = function (number, count, withoutMoney = false) { var first var second var numeral = '' if (number.length === 3) { first = number.substr(0, 1) number = number.substr(1, 3) numeral = '' + words[2][first] + ' ' } if (number < 20) { numeral = numeral + words[0][toFloat(number)] + ' ' } else { first = number.substr(0, 1) second = number.substr(1, 2) numeral = numeral + words[1][first] + ' ' + words[0][second] + ' ' } if (count === 0) { if (!withoutMoney) { numeral = numeral + plural(number, ['гривня', 'гривні', 'гривень']) } } else if (count === 1) { if (numeral !== ' ') { numeral = numeral + plural(number, ['тисяча ', 'тисячі ', 'тисяч ']) numeral = numeral.replace('один ', 'одна ').replace('два ', 'дві ') } } else if (count === 2) { if (numeral !== ' ') { numeral = numeral + plural(number, ['мільйон ', 'мільйона ', 'мільйонів ']) } } else if (count === 3) { numeral = numeral + plural(number, ['мільярд ', 'мільярда ', 'мільярдів ']) } return numeral } var parseDecimals = function (number) { var text = plural(number, ['копійка', 'копійки', 'копійок']) if (number === 0) { number = '00' } else if (number < 10) { number = '0' + number } return ' ' + number + ' ' + text } var rubles = function (number, withoutMoney = false) { if (!number) { return false } var type = typeof number if (type !== 'number' && type !== 'string') { return false } if (type === 'string') { number = toFloat(number.replace(',', '.')) if (isNaN(number)) { return false } } if (number <= 0) { return false } var splt var decimals number = number.toFixed(2) if (number.indexOf('.') !== -1) { splt = number.split('.') number = splt[0] decimals = splt[1] } var numeral = '' var length = number.length - 1 var parts = '' var count = 0 var digit while (length >= 0) { digit = number.substr(length, 1) parts = digit + parts if ((parts.length === 3 || length === 0) && !isNaN(toFloat(parts))) { numeral = parseNumber(parts, count, withoutMoney) + numeral parts = '' count++ } length-- } numeral = numeral.replace(/\s+/g, ' ') if (decimals && !withoutMoney) { numeral = numeral + parseDecimals(toFloat(decimals)) } return numeral } var globals if (typeof module !== 'undefined' && module !== null) { globals = exports } else { globals = window } globals.rubles = rubles })()