Technical Information Database
TI2183C.txt Output Numbers with Thousands Separator
Category :General
Platform :All
Product :C/C++ All
Description:
How do I output comma-formatted numbers such as 1,000,000 with
C++ IOStreams? As common as this would seem, C++ IOStreams have
no support for this. The function shown in the code sample below
serves two purposes: it converts the long to a string and inserts
commas every three digits. Adding the commas during the
conversion is much easier than converting the long to a string
using sprintf() and then modifying the string.
For new programmers, this code is an excellent example use of
the modulus operator to reverse a string. The reversing
algorithm is almost identical to the generic reverse() function
in the Standard Template Library.
#include
const char *commaStr(unsigned long number)
{
const int size = 15; // max number of digits
static char str[size]; // string to return
char *ptr1, *ptr2; // place holders
char tempStr[size]; // workplace
int counter = 0; // three's counter
ptr1 = tempStr;
do {
// grab rightmost digit and add value of character zero
*ptr1++ = (char)(number % 10) + '0';
// strip off rightmost digit
number /= 10;
// if moved over three digits insert comma into string
if (number && !(++counter % 3))
*ptr1++ = ',';
// continue until number equal zero
} while(number);
// this loop reverses characters in a string
for( --ptr1, ptr2 = str; ptr1 >= tempStr; --ptr1)
*ptr2++ = *ptr1;
// add the zero string terminator
*ptr2 = '0';
return str;
}
// simple main to test function
int main() {
cout <<'s "Toolbox". If you're
new to programming, it will be worth your time to run the code
in the debugger and watch how it works. Use
Debug|Evaluate|Modify to see how the modulus works. Then
inspect the pointer in the reverse code to understand how it
accomplishes its task.
CAVEATS
=======
N/A
BIBLIOGRAPHY
============
N/A
Reference:
7/2/98 10:40:36 AM