- แปลงตัวเลขเป็นคำในภาษาอังกฤษ
- แปลงตัวเลขเป็นคำในภาษาไทย
1.แปลงตัวเลขเป็นคำในภาษาอังกฤษ
using System; namespace ConsoleApplication1 { class Program { // PROGRAM HANDLES NEGATIVE AND POSITIVE DOUBLES static void Main(string[] args) { //Console.Write("Enter a number to convert to words: "); //Double num = Double.Parse(Console.ReadLine()); Double num = 101; Console.WriteLine("{0}", NumWordsWrapper(num)); } static String NumWordsWrapper(double num) { string words = ""; double intPart; double decPart = 0; if (num == 0) return "zero"; try { string[] splitter = num.ToString().Split('.'); intPart = double.Parse(splitter[0]); decPart = double.Parse(splitter[1]); } catch { intPart = num; } 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; } static String NumWords(double num) //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 (num < 0) { words += "negative "; num *= -1; } int power = (suffixesArr.Length + 1) * 3; while (power > 3) { double pow = Math.Pow(10, power); if (num >= pow) { if (num % pow > 0) { words += NumWords(Math.Floor(num / pow)) + " " + suffixesArr[(power / 3) - 1] + ", "; } else if (num % pow == 0) { words += NumWords(Math.Floor(num / pow)) + " " + suffixesArr[(power / 3) - 1]; } num %= pow; } power -= 3; } if (num >= 1000) { if (num % 1000 > 0) words += NumWords(Math.Floor(num / 1000)) + " thousand, "; else words += NumWords(Math.Floor(num / 1000)) + " thousand"; num %= 1000; } if (0 <= num && num <= 999) { if ((int)num / 100 > 0) { words += NumWords(Math.Floor(num / 100)) + " hundred"; num %= 100; } if ((int)num / 10 > 1) { if (words != "") words += " "; words += tensArr[(int)num / 10 - 2]; tens = true; num %= 10; } if (num < 20 && num > 0) { if (words != "" && tens == false) words += " "; words += (tens ? "-" + numbersArr[(int)num - 1] : numbersArr[(int)num - 1]); num -= Math.Floor(num); } } return words; } } }
2.แปลงตัวเลขเป็นคำในภาษาไทย
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { //Console.Write("Enter a number to convert to words: "); //Double n = Double.Parse(args[0]); //Double num = 12345.6; //Console.WriteLine("{0}", NumWordsWrapper(num)); Console.WriteLine("{0}", NumWordsWrapper(0)); Console.WriteLine("{0}", NumWordsWrapper(0.5)); Console.WriteLine("{0}", NumWordsWrapper(1)); Console.WriteLine("{0}", NumWordsWrapper(1.0)); Console.WriteLine("{0}", NumWordsWrapper(10)); Console.WriteLine("{0}", NumWordsWrapper(11.25)); Console.WriteLine("{0}", NumWordsWrapper(123.456)); Console.WriteLine("{0}", NumWordsWrapper(12345.6)); } public static string NumWordsWrapper(double num) { string words = ""; int intPart; int decPart = 0; if (num == 0) return "ศูนย์บาท"; intPart = (int)Math.Floor(num); decPart = (int)((num - intPart) * 100); words = NumWords(intPart); if (words != "") { words += "บาท"; } if (decPart > 0) { words += NumWords(decPart) + "สตางค์"; } return words; } private static string NumWords(double num) //converts double to words { string[] numbersArr = new string[] { "เอ็ด", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า", "สิบ" }; string[] tensArr = new string[] { "สิบ", "ยี่สิบ", "สามสิบ", "สี่สิบ", "ห้าสิบ", "หกสิบ", "เจ็ดสิบ", "แปดสิบ", "เก้าสิบ" }; string words = ""; if (num == 1) return "หนึ่ง"; if (num < 0) { words += "ติดลบ"; num *= -1; } if (num >= 1000000) { if (num % 1000000 > 0) words += NumWords(Math.Floor(num / 1000000)) + "ล้าน"; else words += NumWords(Math.Floor(num / 1000000)) + "ล้าน"; num %= 1000000; } if (num >= 100000) { words += NumWords(Math.Floor(num / 100000)) + "แสน"; num %= 100000; } if (num >= 10000) { words += NumWords(Math.Floor(num / 10000)) + "หมื่น"; num %= 10000; } if (num >= 1000) { words += NumWords(Math.Floor(num / 1000)) + "พัน"; num %= 1000; } if (num >= 100) { words += NumWords(Math.Floor(num / 100)) + "ร้อย"; num %= 100; } if (num >= 10) { words += tensArr[Convert.ToInt32(Math.Floor(num / 10)) - 1]; num %= 10; } if (num >= 1) { words += numbersArr[Convert.ToInt32(Math.Floor(num)) - 1]; num -= Math.Floor(num); } return words; } } }
จะได้
ศูนย์บาท ห้าสิบสตางค์ หนึ่งบาท หนึ่งบาท สิบบาท สิบเอ็ดบาทยี่สิบห้าสตางค์ หนึ่งร้อยยี่สิบสามบาทสี่สิบห้าสตางค์ หนึ่งหมื่นสองพันสามร้อยสี่สิบห้าบาทหกสิบสตางค์