using System; namespace Swift.web.Library { public class NumberToWordsConverter { internal static string NumberToWord(double n) { string words = ""; double intPart; double decPart = 0; if (n == 0) return "Zero"; try { string[] splitter = n.ToString().Split('.'); intPart = double.Parse(splitter[0]); decPart = double.Parse(splitter[1]); } catch { intPart = n; } words = NumWords(intPart); if (decPart > 0) { if (words != "") words += " and "; int counter = decPart.ToString().Length; switch (counter) { case 1: words += NumWords(decPart) + " tenths"; break; case 2: words += NumWords(decPart) + " hundredths"; break; case 3: words += NumWords(decPart) + " thousandths"; break; case 4: words += NumWords(decPart) + " ten-thousandths"; break; case 5: words += NumWords(decPart) + " hundred-thousandths"; break; case 6: words += NumWords(decPart) + " millionths"; break; case 7: words += NumWords(decPart) + " ten-millionths"; break; } } return words + " Only."; } private static String NumWords(double n) //converts double to words { string[] numbersArr = new string[] { " One", " Two", " Three", " Four", " Five", " Six", " Seven", " Eight", " Nine", " Ten", " Eleven", " Twelve", " Thirteen", " Fourteen", " Fifteen", " Sixteen", " Seventeen", " Eighteen", " Nineteen" }; string[] tensArr = new string[] { " Twenty", " Thirty", " Fourty", " Fifty", " Sixty", " Seventy", " Eighty", " Ninty" }; string[] suffixesArr = new string[] { "Thousand", "Million", "Billion", "Trillion", "Quadrillion", "Quintillion", "Sextillion", "Septillion", "Octillion", "Nonillion", "Decillion", "Undecillion", "Duodecillion", "Tredecillion", "Quattuordecillion", "Quindecillion", "Sexdecillion", "Septdecillion", "Octodecillion", "Novemdecillion", "Vigintillion" }; string words = ""; bool tens = false; if (n < 0) { words += "Negative "; n *= -1; } int power = (suffixesArr.Length + 1) * 3; while (power > 3) { double pow = Math.Pow(10, power); if (n >= pow) { if (n % pow > 0) { words += NumWords(Math.Floor(n / pow)) + " " + suffixesArr[(power / 3) - 1]; //words += NumWords(Math.Floor(n / pow)) + " " + suffixesArr[(power / 3) - 1] + ", "; } else if (n % pow == 0) { words += NumWords(Math.Floor(n / pow)) + " " + suffixesArr[(power / 3) - 1]; } n %= pow; } power -= 3; } if (n >= 1000) { if (n % 1000 > 0) words += NumWords(Math.Floor(n / 1000)) + " Thousand "; else words += NumWords(Math.Floor(n / 1000)) + " Thousand"; n %= 1000; } if (0 <= n && n <= 999) { if ((int)n / 100 > 0) { words += NumWords(Math.Floor(n / 100)) + " Hundred"; n %= 100; } if ((int)n / 10 > 1) { if (words != "") words += " "; words += tensArr[(int)n / 10 - 2]; tens = true; n %= 10; } if (n < 20 && n > 0) { if (words != "" && tens == false) words += " "; words += (tens ? "-" + numbersArr[(int)n - 1] : numbersArr[(int)n - 1]); n -= Math.Floor(n); } } return words; } } // end class }