mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
Sync with files in zip
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
'''
|
||||
Module: num2word_EN.py
|
||||
Requires: num2word_EU.py
|
||||
Version: 1.0
|
||||
Version: 1.2
|
||||
|
||||
Author:
|
||||
Taro Ogawa (tso@users.sourceforge.org)
|
||||
@@ -23,9 +23,22 @@ Usage:
|
||||
to_card(1234567890)
|
||||
to_ord(1234567890)
|
||||
to_ordnum(1234567890)
|
||||
to_year(1976)
|
||||
to_currency(dollars*100 + cents, longval=False)
|
||||
to_currency((dollars, cents))
|
||||
|
||||
|
||||
History:
|
||||
1.2: to_ordinal_num() made shorter and simpler (but slower)
|
||||
strings in merge() now interpolated
|
||||
to_year() and to_currency() added
|
||||
|
||||
1.1: to_ordinal_num() fixed for 11,12,13
|
||||
'''
|
||||
from __future__ import division
|
||||
import num2word_EU
|
||||
|
||||
|
||||
class Num2Word_EN(num2word_EU.Num2Word_EU):
|
||||
def set_high_numwords(self, high):
|
||||
max = 3 + 3*len(high)
|
||||
@@ -35,7 +48,7 @@ class Num2Word_EN(num2word_EU.Num2Word_EU):
|
||||
def setup(self):
|
||||
self.negword = "minus "
|
||||
self.pointword = "point"
|
||||
self.errmsg_nonnum = "Only numbers may be converted to words."
|
||||
self.errmsg_nornum = "Only numbers may be converted to words."
|
||||
self.exclude_title = ["and", "point", "minus"]
|
||||
|
||||
self.mid_numwords = [(1000, "thousand"), (100, "hundred"),
|
||||
@@ -56,18 +69,16 @@ class Num2Word_EN(num2word_EU.Num2Word_EU):
|
||||
"twelve" : "twelfth" }
|
||||
|
||||
|
||||
def merge(self, curr, next):
|
||||
ctext, cnum, ntext, nnum = curr + next
|
||||
|
||||
if cnum == 1 and nnum < 100:
|
||||
def merge(self, (ltext, lnum), (rtext, rnum)):
|
||||
if lnum == 1 and rnum < 100:
|
||||
return next
|
||||
elif 100 > cnum > nnum :
|
||||
return (ctext + "-" + ntext, cnum + nnum)
|
||||
elif cnum >= 100 > nnum:
|
||||
return (ctext + " and " + ntext, cnum + nnum)
|
||||
elif nnum > cnum:
|
||||
return (ctext + " " + ntext, cnum * nnum)
|
||||
return (ctext + ", " + ntext, cnum + nnum)
|
||||
elif 100 > lnum > rnum :
|
||||
return ("%s-%s"%(ltext, rtext), lnum + rnum)
|
||||
elif lnum >= 100 > rnum:
|
||||
return ("%s and %s"%(ltext, rtext), lnum + rnum)
|
||||
elif rnum > lnum:
|
||||
return ("%s %s"%(ltext, rtext), lnum * rnum)
|
||||
return ("%s, %s"%(ltext, rtext), lnum + rnum)
|
||||
|
||||
|
||||
def to_ordinal(self, value):
|
||||
@@ -88,16 +99,25 @@ class Num2Word_EN(num2word_EU.Num2Word_EU):
|
||||
|
||||
def to_ordinal_num(self, value):
|
||||
self.verify_ordinal(value)
|
||||
out = str(value)
|
||||
out += {"1" : "st",
|
||||
"2" : "nd",
|
||||
"3" : "rd" }.get(out[-1], "th")
|
||||
return out
|
||||
return "%s%s"%(value, self.to_ordinal(value)[-2:])
|
||||
|
||||
|
||||
def to_year(self, val, longval=True):
|
||||
if not (val//100)%10:
|
||||
return self.to_cardinal(val)
|
||||
return self.to_splitnum(val, hightxt="hundred", jointxt="and",
|
||||
longval=longval)
|
||||
|
||||
def to_currency(self, val, longval=True):
|
||||
return self.to_splitnum(val, hightxt="dollar/s", lowtxt="cent/s",
|
||||
jointxt="and", longval=longval)
|
||||
|
||||
|
||||
n2w = Num2Word_EN()
|
||||
to_card = n2w.to_cardinal
|
||||
to_ord = n2w.to_ordinal
|
||||
to_ordnum = n2w.to_ordinal_num
|
||||
to_year = n2w.to_year
|
||||
|
||||
def main():
|
||||
for val in [ 1, 11, 12, 21, 31, 33, 71, 80, 81, 91, 99, 100, 101, 102, 155,
|
||||
@@ -105,9 +125,11 @@ def main():
|
||||
8280, 8291, 150000, 500000, 1000000, 2000000, 2000001,
|
||||
-21212121211221211111, -2.121212, -1.0000100]:
|
||||
n2w.test(val)
|
||||
|
||||
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
|
||||
|
||||
for val in [1,120,1000,1120,1800, 1976,2000,2010,2099,2171]:
|
||||
print val, "is", n2w.to_currency(val)
|
||||
print val, "is", n2w.to_year(val)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user