mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
lang_EN.to_year(): render correct pronunciations (#144)
* Add tests Starting work on #141, which points out that 2017 should come out "twenty seventeen"; it currently comes out "two thousand seventeen". * Handle English years properly. Resolves #141. * Whoops -- didn't PEP-8 my tests * Handle years MORE properly...with suffixes! - Rendering years between 10-99 was bugged (e.g. "zero fifty"). Fixed that by thinking outside the high/low text box I had made. - Added suffixes: default none if positive, 'BC' if negative. User-overrideable.
This commit is contained in:
committed by
Ernesto Rodriguez Ortiz
parent
ab54bed93a
commit
1a2b783d31
@@ -82,8 +82,24 @@ class Num2Word_EN(lang_EU.Num2Word_EU):
|
|||||||
self.verify_ordinal(value)
|
self.verify_ordinal(value)
|
||||||
return "%s%s" % (value, self.to_ordinal(value)[-2:])
|
return "%s%s" % (value, self.to_ordinal(value)[-2:])
|
||||||
|
|
||||||
def to_year(self, val, longval=True):
|
def to_year(self, val, suffix=None, longval=True):
|
||||||
if not (val // 100) % 10:
|
if val < 0:
|
||||||
return self.to_cardinal(val)
|
val = abs(val)
|
||||||
return self.to_splitnum(val, hightxt="hundred", jointxt="and",
|
suffix = 'BC' if not suffix else suffix
|
||||||
longval=longval)
|
high, low = (val // 100, val % 100)
|
||||||
|
# If year is 00XX, X00X, or beyond 9999, go cardinal.
|
||||||
|
if (high == 0
|
||||||
|
or (high % 10 == 0 and low < 10)
|
||||||
|
or high >= 100):
|
||||||
|
valtext = self.to_cardinal(val)
|
||||||
|
else:
|
||||||
|
hightext = self.to_cardinal(high)
|
||||||
|
if low == 0:
|
||||||
|
lowtext = "hundred"
|
||||||
|
elif low < 10:
|
||||||
|
lowtext = "oh-%s" % self.to_cardinal(low)
|
||||||
|
else:
|
||||||
|
lowtext = self.to_cardinal(low)
|
||||||
|
valtext = "%s %s" % (hightext, lowtext)
|
||||||
|
return (valtext if not suffix
|
||||||
|
else "%s %s" % (valtext, suffix))
|
||||||
|
|||||||
@@ -59,3 +59,51 @@ class Num2WordsENTest(TestCase):
|
|||||||
cents=True, currency='USD'),
|
cents=True, currency='USD'),
|
||||||
'four thousand, seven hundred and seventy-eight dollars and'
|
'four thousand, seven hundred and seventy-eight dollars and'
|
||||||
' zero cents')
|
' zero cents')
|
||||||
|
|
||||||
|
def test_to_year(self):
|
||||||
|
# issue 141
|
||||||
|
# "e2 e2"
|
||||||
|
self.assertEqual(num2words(1990, lang='en', to='year'),
|
||||||
|
'nineteen ninety')
|
||||||
|
self.assertEqual(num2words(5555, lang='en', to='year'),
|
||||||
|
'fifty-five fifty-five')
|
||||||
|
self.assertEqual(num2words(2017, lang='en', to='year'),
|
||||||
|
'twenty seventeen')
|
||||||
|
self.assertEqual(num2words(1066, lang='en', to='year'),
|
||||||
|
'ten sixty-six')
|
||||||
|
self.assertEqual(num2words(1865, lang='en', to='year'),
|
||||||
|
'eighteen sixty-five')
|
||||||
|
# "e3 and e1"; "e2 oh-e1"; "e3"
|
||||||
|
self.assertEqual(num2words(3000, lang='en', to='year'),
|
||||||
|
'three thousand')
|
||||||
|
self.assertEqual(num2words(2001, lang='en', to='year'),
|
||||||
|
'two thousand and one')
|
||||||
|
self.assertEqual(num2words(1901, lang='en', to='year'),
|
||||||
|
'nineteen oh-one')
|
||||||
|
self.assertEqual(num2words(2000, lang='en', to='year'),
|
||||||
|
'two thousand')
|
||||||
|
self.assertEqual(num2words(905, lang='en', to='year'),
|
||||||
|
'nine oh-five')
|
||||||
|
# "e2 hundred"; "e3"
|
||||||
|
self.assertEqual(num2words(6600, lang='en', to='year'),
|
||||||
|
'sixty-six hundred')
|
||||||
|
self.assertEqual(num2words(1900, lang='en', to='year'),
|
||||||
|
'nineteen hundred')
|
||||||
|
self.assertEqual(num2words(600, lang='en', to='year'),
|
||||||
|
'six hundred')
|
||||||
|
self.assertEqual(num2words(50, lang='en', to='year'),
|
||||||
|
'fifty')
|
||||||
|
self.assertEqual(num2words(0, lang='en', to='year'),
|
||||||
|
'zero')
|
||||||
|
# suffixes
|
||||||
|
self.assertEqual(num2words(-44, lang='en', to='year'),
|
||||||
|
'forty-four BC')
|
||||||
|
self.assertEqual(num2words(-44, lang='en', to='year', suffix='BCE'),
|
||||||
|
'forty-four BCE')
|
||||||
|
self.assertEqual(num2words(1, lang='en', to='year', suffix='AD'),
|
||||||
|
'one AD')
|
||||||
|
self.assertEqual(num2words(66, lang='en', to='year',
|
||||||
|
suffix='m.y.a.'),
|
||||||
|
'sixty-six m.y.a.')
|
||||||
|
self.assertEqual(num2words(-66000000, lang='en', to='year'),
|
||||||
|
'sixty-six million BC')
|
||||||
|
|||||||
Reference in New Issue
Block a user