hryvnias
Version:
Вартість прописом
203 lines (169 loc) • 4.36 kB
JavaScript
;(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
})()