Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

DZone's Guide to

Convert An Integer To English Written Form

·
Free Resource

Comment (0)

Save
{{ articles[0].views | formatCount}} Views
```English is a peculiar language.  english_number() takes an integer, and returns the long, written form most famously used on checks and the like.  Algorithm inspired by some old HP online docs.

```
to_19 = ( 'zero',  'one',   'two',  'three', 'four',   'five',   'six',
'seven', 'eight', 'nine', 'ten',   'eleven', 'twelve', 'thirteen',
'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen' )
tens  = ( 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety')
denom = ( '',
'thousand',     'million',         'billion',       'trillion',       'quadrillion',
'quintillion',  'sextillion',      'septillion',    'octillion',      'nonillion',
'decillion',    'undecillion',     'duodecillion',  'tredecillion',   'quattuordecillion',
'sexdecillion', 'septendecillion', 'octodecillion', 'novemdecillion', 'vigintillion' )

# convert a value < 100 to English.
def _convert_nn(val):
if val < 20:
for (dcap, dval) in ((k, 20 + (10 * v)) for (v, k) in enumerate(tens)):
if dval + 10 > val:
if val % 10:
return dcap + '-' + to_19[val % 10]
return dcap

# convert a value < 1000 to english, special cased because it is the level that kicks
# off the < 100 special case.  The rest are more general.  This also allows you to
# get strings in the form of 'forty-five hundred' if called directly.
def _convert_nnn(val):
word = ''
(mod, rem) = (val % 100, val // 100)
if rem > 0:
word = to_19[rem] + ' hundred'
if mod > 0:
word = word + ' '
if mod > 0:
word = word + _convert_nn(mod)
return word

def english_number(val):
if val < 100:
return _convert_nn(val)
if val < 1000:
return _convert_nnn(val)
for (didx, dval) in ((v - 1, 1000 ** v) for v in range(len(denom))):
if dval > val:
mod = 1000 ** didx
l = val // mod
r = val - (l * mod)
ret = _convert_nnn(l) + ' ' + denom[didx]
if r > 0:
ret = ret + ', ' + english_number(r)
return ret

``````
Topics:

Comment (0)

Save
{{ articles[0].views | formatCount}} Views

Opinions expressed by DZone contributors are their own.