Preface
Ever wanted a friendlier way to display any given amount to a user? Or, perhaps you're coding a grammatically correct English application, racing game, tracking visitors, or creating an accounting solution. Whatever the case, there are some times when a programmer needs to represent a number as a written word (i.e., 4 becomes "four"). And, that's the goal of this routine.
The original version (as most typical implementations of this) used strings for calculations and conversions and while it worked, it was slower. However, I updated the algorithm to not do this anymore. As a result, I noticed an average 310% speed increase (on a Pentium IV) despite the fact I also added support for much larger numbers as well.
Usage
Using this routine is straightforward. It does make use of C-style strings as they are fast and extremely portable with most environments. The sole routine that does the grunt work is named GetNumWord()
and is prototyped as follows...
char *GetNumWord (long long llNumber, char *szDest,
unsigned int unLen, bool bOrdinal, bool bUseAnd);
Parameter Descriptions:
llNumber = |
This is the 64-bit number to convert. |
szDest = |
Pointer to the output buffer (char array). |
unLen = |
Size in bytes of the output buffer (not string length). |
bOrdinal = |
Setting this to true will return the ordinal version of the number (e.g., first); otherwise, the cardinal version is returned (e.g., one). |
bUseAnd = |
This will determine if the and conjunction is used in the output or not (e.g., One Hundred And One). |
Example
char szBuffer[100] = {0};
GetNumWord(5001, szBuffer, sizeof(szBuffer), false, false);
GetNumWord(-10, szBuffer, sizeof(szBuffer), false, false);
GetNumWord(123, szBuffer, sizeof(szBuffer), true, true);
Will return...
"Five Thousand One"
"Negative Ten"
"One Hundred And Twenty-Third"
Limitations
The function takes a long long
as the number parameter. On most 32-bit and 64-bit systems, this means the lowest number you can pass is -9,223,372,036,854,775,808
and the highest number is 9,223,372,036,854,775,807
.
Also, 64-bit arithmetic on a 32-bit CPU is a bit slower. However, the difference is negligible for most applications, and 64-bit CPUs are becoming more and more mainstream, so this consideration will soon be obsolete.
Credits & History
Article's Author |
- Jeremy Falcon |
The "and" Conjunction Suggestion |
- benjymous |
Memory Leak Tip |
- James Curran |
- 2007-01-13 - Ver. 2.0 released.
- 2002-04-12 - Ver. 1.1 released.
- 2002-04-01 - Ver. 1.0 released.
| |
License
Permission is granted to anyone to use this software for any purpose on any computer system, and to alter it and redistribute it freely, subject to the following restrictions found in NumWord.c. It's nothing big. Essentially, it states that if your computer blows up then it's not my fault, and if you use this code then give credit where it's due.