= Formating Numbers = ''Part of'' TutorialIntermediate == Description == This function takes a number as a char array and inserts commas in the right places; "1000" becomes "1,000", etc.; for numbers smaller than that, it just returns the original number. Some overloads were added so that some integers can be converted, too. Negative values and floating-point numbers are not handled. == Example == {{{ #!d import std.conv : to; import std.exception : assumeUnique; string formatNumber(int i) { return formatNumber(to!string(i)); } string formatNumber(long i) { return formatNumber(to!string(i)); } string formatNumber(const(char)[] n) { char[] number = n.dup; for(int i = n.length - 3; i >= 1; i -= 3) { number=number[0 .. i] ~ "," ~ number[i .. $]; } return assumeUnique(number); } version(example) import std.stdio; /* for writefln (for un) */ unittest { version(example) writefln("Running unittest..."); assert(formatNumber("100") == "100"); assert(formatNumber("1000") == "1,000"); assert(formatNumber("10000000") == "10,000,000"); version(example) writefln("unittest Passed!"); } version(example) { void main() /* Usage Example */ { writefln(formatNumber(1)); writefln(formatNumber(12)); writefln(formatNumber(123)); writefln(formatNumber(1234)); writefln(formatNumber(12345)); writefln(formatNumber(123456)); writefln(formatNumber(1234567)); writefln(formatNumber(12345678)); writefln(formatNumber(123456789)); writefln(formatNumber(1234567890)); } } else { void main() { } } }}} === Templated Example === {{{ #!d import std.conv : to; import std.exception : assumeUnique; string formatNumber(Number)(Number n) { char[] number = to!(char[])(n); for(int i = number.length - 3; i >= 1; i -= 3) { number = number[0 .. i] ~ "," ~ number[i .. $]; } return assumeUnique(number); } version(example) import std.stdio; /* for writefln (for un) */ unittest { version(example) writefln("Running unittest..."); assert(formatNumber("100") == "100"); assert(formatNumber("1000") == "1,000"); assert(formatNumber("10000000") == "10,000,000"); version(example) writefln("unittest Passed!"); } version(example) { void main() /* Usage Example */ { writefln(formatNumber(1)); writefln(formatNumber(12)); writefln(formatNumber(123)); writefln(formatNumber(1234)); writefln(formatNumber(12345)); writefln(formatNumber(123456)); writefln(formatNumber(1234567)); writefln(formatNumber(12345678)); writefln(formatNumber(123456789)); writefln(formatNumber(1234567890)); } } else { void main() { } } }}} == Compilation Tips == * Compile with -version=example to run example. * Compile with -unittest to run unittests when the program is run. == Example Call == {{{ rdmd FormatNumberExample.d -unittest -version=example }}} == Console Output == {{{ Running unittest... unittest Passed! 1 12 123 1,234 12,345 123,456 1,234,567 12,345,678 123,456,789 1,234,567,890 }}} == Source == * Based on [http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=32149 digitalmars.D/32149] by Ameer Armaly. * Corrected to get unittest to pass by J C Calvarese.