mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
Added Lithuanian numbers support.
This commit is contained in:
175
num2word_LT.py
Normal file
175
num2word_LT.py
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
>>> ' '.join([str(i) for i in splitby3('1')])
|
||||||
|
'1'
|
||||||
|
>>> ' '.join([str(i) for i in splitby3('1123')])
|
||||||
|
'1 123'
|
||||||
|
>>> ' '.join([str(i) for i in splitby3('1234567890')])
|
||||||
|
'1 234 567 890'
|
||||||
|
|
||||||
|
>>> ' '.join([n2w(i) for i in range(10)])
|
||||||
|
u'nulis vienas du trys keturi penki \u0161e\u0161i septyni a\u0161tuoni devyni'
|
||||||
|
>>> ' '.join([n2w(i+10) for i in range(10)])
|
||||||
|
u'de\u0161imt vienuolika dvylika trylika keturiolika penkiolika \u0161e\u0161iolika septiniolika a\u0161tuoniolika devyniolika'
|
||||||
|
>>> ' '.join([n2w(i*10) for i in range(10)])
|
||||||
|
u'nulis de\u0161imt dvide\u0161imt trisde\u0161imt keturiasde\u0161imt penkiasde\u0161imt \u0161e\u0161iasde\u0161imt septyniasde\u0161imt a\u0161tuoniasde\u0161imt devyniasde\u0161imt'
|
||||||
|
|
||||||
|
>>> n2w(123)
|
||||||
|
u'\u0161imtas dvide\u0161imt trys'
|
||||||
|
>>> n2w(100)
|
||||||
|
u'\u0161imtas'
|
||||||
|
>>> n2w(101)
|
||||||
|
u'\u0161imtas vienas'
|
||||||
|
>>> n2w(110)
|
||||||
|
u'\u0161imtas de\u0161imt'
|
||||||
|
>>> n2w(115)
|
||||||
|
u'\u0161imtas penkiolika'
|
||||||
|
>>> n2w(1000)
|
||||||
|
u't\u016bkstantis'
|
||||||
|
>>> n2w(1001)
|
||||||
|
u't\u016bkstantis vienas'
|
||||||
|
>>> n2w(2012)
|
||||||
|
u'du t\u016bkstan\u010diai dvylika'
|
||||||
|
>>> n2w(1234567890)
|
||||||
|
u'milijardas du \u0161imtai trisde\u0161imt keturi milijonai penki \u0161imtai \u0161e\u0161iasde\u0161imt septyni t\u016bkstan\u010diai a\u0161tuoni \u0161imtai devyniasde\u0161imt'
|
||||||
|
|
||||||
|
#>>> to_currency(1234.56, 'LTL')
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
ZERO = (u'nulis',)
|
||||||
|
|
||||||
|
ONES = {
|
||||||
|
1: (u'vienas',),
|
||||||
|
2: (u'du',),
|
||||||
|
3: (u'trys',),
|
||||||
|
4: (u'keturi',),
|
||||||
|
5: (u'penki',),
|
||||||
|
6: (u'šeši',),
|
||||||
|
7: (u'septyni',),
|
||||||
|
8: (u'aštuoni',),
|
||||||
|
9: (u'devyni',),
|
||||||
|
}
|
||||||
|
|
||||||
|
TENS = {
|
||||||
|
0: (u'dešimt',),
|
||||||
|
1: (u'vienuolika',),
|
||||||
|
2: (u'dvylika',),
|
||||||
|
3: (u'trylika',),
|
||||||
|
4: (u'keturiolika',),
|
||||||
|
5: (u'penkiolika',),
|
||||||
|
6: (u'šešiolika',),
|
||||||
|
7: (u'septiniolika',),
|
||||||
|
8: (u'aštuoniolika',),
|
||||||
|
9: (u'devyniolika',),
|
||||||
|
}
|
||||||
|
|
||||||
|
TWENTIES = {
|
||||||
|
2: (u'dvidešimt',),
|
||||||
|
3: (u'trisdešimt',),
|
||||||
|
4: (u'keturiasdešimt',),
|
||||||
|
5: (u'penkiasdešimt',),
|
||||||
|
6: (u'šešiasdešimt',),
|
||||||
|
7: (u'septyniasdešimt',),
|
||||||
|
8: (u'aštuoniasdešimt',),
|
||||||
|
9: (u'devyniasdešimt',),
|
||||||
|
}
|
||||||
|
|
||||||
|
HUNDRED = (u'šimtas', u'šimtai')
|
||||||
|
|
||||||
|
THOUSANDS = {
|
||||||
|
1: (u'tūkstantis', u'tūkstančiai', u'tūkstančių'),
|
||||||
|
2: (u'milijonas', u'milijonai', u'milijonų'),
|
||||||
|
3: (u'milijardas', u'milijardai', u'milijardų'),
|
||||||
|
4: (u'trilijonas', u'trilijonai', u'trilijonų'),
|
||||||
|
5: (u'kvadrilijonas', u'kvadrilijonai', u'kvadrilijonų'),
|
||||||
|
6: (u'kvintilijonas', u'kvintilijonai', u'kvintilijonų'),
|
||||||
|
7: (u'sikstilijonas', u'sikstilijonai', u'sikstilijonų'),
|
||||||
|
8: (u'septilijonas', u'septilijonai', u'septilijonų'),
|
||||||
|
9: (u'oktilijonas', u'oktilijonai', u'oktilijonų'),
|
||||||
|
10: (u'naintilijonas', u'naintilijonai', u'naintilijonų'),
|
||||||
|
}
|
||||||
|
|
||||||
|
CURRENCIES = {
|
||||||
|
'LTL': (('litas', 'litai', 'litų'), ('centas', 'centai', 'centų')),
|
||||||
|
}
|
||||||
|
|
||||||
|
def splitby3(n):
|
||||||
|
length = len(n)
|
||||||
|
if length > 3:
|
||||||
|
start = length % 3
|
||||||
|
if start > 0:
|
||||||
|
yield int(n[:start])
|
||||||
|
for i in range(start, length, 3):
|
||||||
|
yield int(n[i:i+3])
|
||||||
|
else:
|
||||||
|
yield int(n)
|
||||||
|
|
||||||
|
|
||||||
|
def get_digits(n):
|
||||||
|
n1 = n2 = n3 = 0
|
||||||
|
if n > 99:
|
||||||
|
n3 = (n % 1000)//100
|
||||||
|
if n > 9:
|
||||||
|
n2 = (n % 100)//10
|
||||||
|
n1 = n % 10
|
||||||
|
return (n1, n2, n3)
|
||||||
|
|
||||||
|
|
||||||
|
def int2word(n):
|
||||||
|
if n == 0:
|
||||||
|
return ZERO[0]
|
||||||
|
|
||||||
|
words = []
|
||||||
|
chunks = list(splitby3(str(n)))
|
||||||
|
i = len(chunks)
|
||||||
|
for x in chunks:
|
||||||
|
i -= 1
|
||||||
|
n1, n2, n3 = get_digits(x)
|
||||||
|
|
||||||
|
if n3 > 0:
|
||||||
|
if n3 > 1:
|
||||||
|
words.append(ONES[n3][0])
|
||||||
|
words.append(HUNDRED[1])
|
||||||
|
else:
|
||||||
|
words.append(HUNDRED[0])
|
||||||
|
|
||||||
|
if n2 > 1:
|
||||||
|
words.append(TWENTIES[n2][0])
|
||||||
|
|
||||||
|
if n2 == 1:
|
||||||
|
words.append(TENS[n1][0])
|
||||||
|
elif n1 > 0 and not (i > 0 and n1 == 1):
|
||||||
|
words.append(ONES[n1][0])
|
||||||
|
|
||||||
|
if i > 0:
|
||||||
|
if n1 == 1 and n2 != 1:
|
||||||
|
words.append(THOUSANDS[i][0])
|
||||||
|
elif n1 > 1:
|
||||||
|
words.append(THOUSANDS[i][1])
|
||||||
|
else:
|
||||||
|
words.append(THOUSANDS[i][2])
|
||||||
|
|
||||||
|
return ' '.join(words)
|
||||||
|
|
||||||
|
def n2w(n):
|
||||||
|
n = str(n).replace(',', '.')
|
||||||
|
if '.' in n:
|
||||||
|
left, right = n.split('.')
|
||||||
|
return u'%s kablelis %s' % (int2word(int(left)), int2word(int(right)))
|
||||||
|
else:
|
||||||
|
return int2word(int(n))
|
||||||
|
|
||||||
|
def to_currency(n, currency='LTL'):
|
||||||
|
n = str(n).replace(',', '.')
|
||||||
|
if '.' in n:
|
||||||
|
left, right = n.split('.')
|
||||||
|
else:
|
||||||
|
left, right = n, 0
|
||||||
|
left, right = int(left), int(right)
|
||||||
|
return u'%s kablelis %s' % (int2word(left), int2word(right))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import doctest
|
||||||
|
doctest.testmod()
|
||||||
Reference in New Issue
Block a user