//Wrapper class for NumberToText(int n) to account for single zero parameter. public static string ConvertToStringRepresentation(long number) { string result = null; if (number == 0) { result = "Zero"; } else { result = NumberToText(number); } return result; } //Found at http://www.dotnet2themax.com/blogs/fbalena/PermaLink,guid,cdceca73-08cd-4c15-aef7-0f9c8096e20a.aspx. //Modifications from original source: // Changed parameter type from int to long. // Changed labels to be singulars instead of plurals (Billions to Billion, Millions to Million, etc.). private static string NumberToText(long n) { if (n < 0) return "Minus " + NumberToText(-n); else if (n == 0) return ""; else if (n <= 19) return new string[] {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}[n - 1] + " "; else if (n <= 99) return new string[] {"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}[n / 10 - 2] + " " + NumberToText(n % 10); else if (n <= 199) return "One Hundred " + NumberToText(n % 100); else if (n <= 999) return NumberToText(n / 100) + "Hundred " + NumberToText(n % 100); else if (n <= 1999) return "One Thousand " + NumberToText(n % 1000); else if (n <= 999999) return NumberToText(n / 1000) + "Thousand " + NumberToText(n % 1000); else if (n <= 1999999) return "One Million " + NumberToText(n % 1000000); else if (n <= 999999999) return NumberToText(n / 1000000) + "Million " + NumberToText(n % 1000000); else if (n <= 1999999999) return "One Billion " + NumberToText(n % 1000000000); else return NumberToText(n / 1000000000) + "Billion " + NumberToText(n % 1000000000); }