116 lines
2.4 KiB
Python
116 lines
2.4 KiB
Python
# integer number to english word conversion
|
|
# can be used for numbers as large as 999 vigintillion
|
|
# (vigintillion --> 10 to the power 60)
|
|
# tested with Python24 vegaseat 07dec2006
|
|
def int2word(n):
|
|
"""
|
|
convert an integer number n into a string of english words
|
|
"""
|
|
# break the number into groups of 3 digits using slicing
|
|
# each group representing hundred, thousand, million, billion, ...
|
|
n3 = []
|
|
r1 = ""
|
|
# create numeric string
|
|
ns = str(n)
|
|
for k in range(3, 33, 3):
|
|
r = ns[-k:]
|
|
q = len(ns) - k
|
|
# break if end of ns has been reached
|
|
if q < -2:
|
|
break
|
|
else:
|
|
if q >= 0:
|
|
n3.append(int(r[:3]))
|
|
elif q >= -1:
|
|
n3.append(int(r[:2]))
|
|
elif q >= -2:
|
|
n3.append(int(r[:1]))
|
|
r1 = r
|
|
|
|
# print n3 # test
|
|
|
|
# break each group of 3 digits into
|
|
# ones, tens/twenties, hundreds
|
|
# and form a string
|
|
nw = ""
|
|
for i, x in enumerate(n3):
|
|
b1 = x % 10
|
|
b2 = (x % 100) // 10
|
|
b3 = (x % 1000) // 100
|
|
# print b1, b2, b3 # test
|
|
if x == 0:
|
|
continue # skip
|
|
else:
|
|
t = thousands[i]
|
|
if b2 == 0:
|
|
nw = ones[b1] + t + nw
|
|
elif b2 == 1:
|
|
nw = tens[b1] + t + nw
|
|
elif b2 > 1:
|
|
nw = twenties[b2] + ones[b1] + t + nw
|
|
if b3 > 0:
|
|
nw = ones[b3] + "hundred " + nw
|
|
return nw
|
|
|
|
|
|
############# globals ################
|
|
ones = [
|
|
"",
|
|
"one ",
|
|
"two ",
|
|
"three ",
|
|
"four ",
|
|
"five ",
|
|
"six ",
|
|
"seven ",
|
|
"eight ",
|
|
"nine ",
|
|
]
|
|
tens = [
|
|
"ten ",
|
|
"eleven ",
|
|
"twelve ",
|
|
"thirteen ",
|
|
"fourteen ",
|
|
"fifteen ",
|
|
"sixteen ",
|
|
"seventeen ",
|
|
"eighteen ",
|
|
"nineteen ",
|
|
]
|
|
twenties = [
|
|
"",
|
|
"",
|
|
"twenty ",
|
|
"thirty ",
|
|
"forty ",
|
|
"fifty ",
|
|
"sixty ",
|
|
"seventy ",
|
|
"eighty ",
|
|
"ninety ",
|
|
]
|
|
thousands = [
|
|
"",
|
|
"thousand ",
|
|
"million ",
|
|
"billion ",
|
|
"trillion ",
|
|
"quadrillion ",
|
|
"quintillion ",
|
|
"sextillion ",
|
|
"septillion ",
|
|
"octillion ",
|
|
"nonillion ",
|
|
"decillion ",
|
|
"undecillion ",
|
|
"duodecillion ",
|
|
"tredecillion ",
|
|
"quattuordecillion ",
|
|
"sexdecillion ",
|
|
"septendecillion ",
|
|
"octodecillion ",
|
|
"novemdecillion ",
|
|
"vigintillion ",
|
|
]
|