Converting numbers to strings

by Colin Ross on December 21, 2008

As a quick exercise for myself I coded up some Haskell to convert an integer into a string, so that something like 40323 will become “forty thousand three hundred and twenty-three”.

As an exercise it was interesting as my code evolved from a lump of spaghetti-like nonsense with far too many if/then/else statements to something more approaching sanity.

There was also the nice diversion of finding out just how high the numbers could go, for which I made use of Jim Loy’s Million, Billion, Trillion. Unfortunately, while I did try to support googolplex, I couldn’t find an easy way to support it. As a result the largest simple number supported is a measly centillion (the three hundred and third power of ten).

What was more interesting was trying it out on the integer -1. The answer…

nine hundred and ninety-nine googol nine undecillion nine hundred and
ninety-nine decillion nine hundred and ninety-nine nonillion nine hundred
and ninety-nine octillion nine hundred and ninety-nine septillion nine
hundred and ninety-nine quintillion nine hundred and ninety-nine
quintillion nine hundred and ninety-nine quadrillion nine hundred and
ninety-nine trillion nine hundred and ninety-nine billion nine hundred and
ninety-nine million nine hundred and ninety-nine thousand nine hundred and
ninety-nine vigintillion nine hundred and ninety-nine novemdecillion nine
hundred and ninety-nine octodecillion nine hundred and ninety-nine
septendecillion nine hundred and ninety-nine sexdecillion nine hundred and
ninety-nine quindecillion nine hundred and ninety-nine quattuordecillion
nine hundred and ninety-nine tredecillion nine hundred and ninety-nine
undecillion nine hundred and ninety-nine undecillion nine hundred and
ninety-nine decillion nine hundred and ninety-nine nonillion nine hundred
and ninety-nine octillion nine hundred and ninety-nine septillion nine
hundred and ninety-nine quintillion nine hundred and ninety-nine
quintillion nine hundred and ninety-nine quadrillion nine hundred and
ninety-nine trillion nine hundred and ninety-nine billion nine hundred
and ninety-nine million nine hundred and ninety-nine thousand nine hundred
and ninety-nine googol nine undecillion nine hundred and ninety-nine
decillion nine hundred and ninety-nine nonillion nine hundred and
ninety-nine octillion nine hundred and ninety-nine septillion nine hundred
and ninety-nine quintillion nine hundred and ninety-nine quintillion nine
hundred and ninety-nine quadrillion nine hundred and ninety-nine trillion
nine hundred and ninety-nine billion nine hundred and ninety-nine million
nine hundred and ninety-nine thousand nine hundred and ninety-nine
vigintillion nine hundred and ninety-nine novemdecillion nine hundred and
ninety-nine octodecillion nine hundred and ninety-nine septendecillion
nine hundred and ninety-nine sexdecillion nine hundred and ninety-nine
quindecillion nine hundred and ninety-nine quattuordecillion nine hundred
and ninety-nine tredecillion nine hundred and ninety-nine undecillion nine
hundred and ninety-nine undecillion nine hundred and ninety-nine decillion
nine hundred and ninety-nine nonillion nine hundred and ninety-nine
octillion nine hundred and ninety-nine septillion nine hundred and
ninety-nine quintillion nine hundred and ninety-nine quintillion nine
hundred and ninety-nine quadrillion nine hundred and ninety-nine trillion
nine hundred and ninety-nine billion nine hundred and ninety-nine million
nine hundred and ninety-nine thousand nine hundred and ninety-nine googol
nine undecillion nine hundred and ninety-nine decillion nine hundred and
ninety-nine nonillion nine hundred and ninety-nine octillion nine hundred
and ninety-nine septillion nine hundred and ninety-nine quintillion nine
hundred and ninety-nine quintillion nine hundred and ninety-nine
quadrillion nine hundred and ninety-nine trillion nine hundred and
ninety-nine billion nine hundred and ninety-nine million nine hundred and
ninety-nine thousand nine hundred and ninety-nine vigintillion nine
hundred and ninety-nine novemdecillion nine hundred and ninety-nine
octodecillion nine hundred and ninety-nine septendecillion nine hundred
and ninety-nine sexdecillion nine hundred and ninety-nine quindecillion
nine hundred and ninety-nine quattuordecillion nine hundred and ninety-nine
tredecillion nine hundred and ninety-nine undecillion nine hundred and
ninety-nine undecillion nine hundred and ninety-nine decillion nine hundred
and ninety-nine nonillion nine hundred and ninety-nine octillion nine
hundred and ninety-nine septillion nine hundred and ninety-nine quintillion
nine hundred and ninety-nine quintillion nine hundred and ninety-nine
quadrillion nine hundred and ninety-nine trillion nine hundred and
ninety-nine billion nine hundred and ninety-nine million nine hundred and
ninety-nine thousand nine hundred and ninety-nine

which as well as being a spectacular number of nines, was actually quite a pleasant surprise – I was expecting an infinite loop. Looking more closely though, I do believe there is a large number of zeros in that array of nines. Specifically, between the googols and the undecillions of which there are two instances. Seems there is potential for a project to do the reverse and actually find where these zeros are!

Today’s lesson learned – neglect the negative integers at your peril!

This code is the first to be placed in the Projects section. To keep track of it, that is the place to be.

Bookmark and Share

No related posts.

{ 1 comment… read it below or add one }

pandammonium January 5, 2009 at 9:49 pm

How about a choice between long and short scale?

Reply

Leave a Comment

Previous post:

Next post: