= 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. Some overloads were added so that some integers can be converted, too. Negative values and floating-point numbers (which aren't handled yet) would require more code. == Example == {{{ #!d import std.string; /* for StringException */ string formatNumber(int i) { return formatNumber(toString(i)); } string formatNumber(long i) { return formatNumber(toString(i)); } string formatNumber(bool i) { return formatNumber(toString(i)); } string formatNumber(string n) { char[] number=n.dup; for(int i=n.length-3; i>=1; i-=3) { if(!std.ctype.isdigit(number[i])) throw new StringException("expected digits:"~n); else number=number[0..i]~","~number[i..$]; } return 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)); } }}} == Compilation Tips == * Compile with -version=example to run example. * Compile with -unittest to run unittests when the program is run. == Batch File == {{{ @echo off dmd FormatNumberExample.d -c dmd FormatNumberExample.d -unittest -version=example dmd FormatNumberExample.d -version=example FormatNumberExample.exe pause erase FormatNumberExample.obj erase FormatNumberExample.map erase FormatNumberExample.exe }}} == Console Output == {{{ c:\dmd\bin\..\..\dm\bin\link.exe string,,,user32+kernel32/noi; c:\dmd\bin\..\..\dm\bin\link.exe string,,,user32+kernel32/noi; 1 12 123 1,234 12,345 123,456 1,234,567 12,345,678 123,456,789 1,234,567,890 Press any key to continue . . . }}} == 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. == Testing == Tested with Digital Mars D Compiler v0.143 on Windows 2000.