After your first post, I tried to code one that did it all but it had 2 complications. The first was knowing how big your number was going to be and how many decimals it had. The utility would be useless onless it could cater for anysize number. The second is catering for things like this where 1 is ONE, 21 is TWENTY ONE, but 11 is ELEVEN. I did find that it was do-able especially if you deal with your number in a look from right to left. Then 1024 could easily be expressed as ONE THOUSAND TWENTY FOUR.
One of the oldesr routines available most of the times in COBOL.
In Brazil(Portuguese) we call ROTINA DE EXTENSO and has been used initially to write checks and later for other applications.
Mattias, if you are interested, i have a routine in natural, that makes this, but is very simple and usefull, and i think its fine for you, because this routine uses arrays, then you can create an array for every language.