using System; namespace HumanReadable { public static class HumanReadableExt { private static readonly string[] _digits = { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; private static readonly string[] _teens = { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; private static readonly string[] _illions = { "", "thousand", "million", "billion", "trillion" }; private static string Seg(int number) { var work = string.Empty; if (number >= 100) work += _digits[number / 100] + " hundred "; if ((number % 100) < 20) work += _digits[number % 100]; else work += _teens[(number % 100) / 10] + "-" + _digits[number % 10]; return work; } public static string HumanReadable(this int number) { if (number == 0) return "zero"; var work = string.Empty; var parts = new string[_illions.Length]; for (var ind = 0; ind < parts.Length; ind++) parts[ind] = Seg((int) (number % Math.Pow(1000, ind + 1) / Math.Pow(1000, ind))); for (var ind = 0; ind < parts.Length; ind++) if (!string.IsNullOrEmpty(parts[ind])) work = parts[ind] + " " + _illions[ind] + ", " + work; work = work.TrimEnd(',', ' '); var lastSpace = work.LastIndexOf(' '); if (lastSpace >= 0) work = work.Substring(0, lastSpace) + " and" + work.Substring(lastSpace); return work; } } class Program { static void Main(string[] args) { Console.WriteLine(1.HumanReadable()); Console.WriteLine(53.HumanReadable()); Console.WriteLine(723603.HumanReadable()); Console.WriteLine(1456376562.HumanReadable()); Console.ReadLine(); } } }
source share