public static void Main()
Console.WriteLine(120.66m.ToCurrencyWords().ToUpperInvariant());
public static class DecimalToWordExtension
public static string ToCurrencyWords(this decimal value)
string input = Math.Round(value, 2).ToString();
var pointIndex = input.IndexOf(".");
decimals = input.Substring(pointIndex + 1);
input = input.Remove(pointIndex);
var words = new StringBuilder();
words.Append(GetWords(input));
words.Append($" and {decimals} / 100 dollars");
words.Append(" and 00 / 100 dollars");
private static string GetWords(string input)
string[] seperators = { "", " thousand ", " million ", " billion " };
string _3digits = input.Length < 3 ? input : input.Substring(input.Length - 3);
input = input.Length < 3 ? "" : input.Remove(input.Length - 3);
int number = int.Parse(_3digits);
_3digits = Get3DigitsWords(number);
_3digits += seperators[i];
strWords = _3digits + strWords;
private static string Get3DigitsWords(int number)
"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven",
"twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "ninteen"
string[] tens = { "ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" };
if (number > 99 && number < 1000)
word = word + ones[i - 1] + " hundred ";
if (number > 19 && number < 100)
word = word + tens[i - 1] + " ";
if (number > 0 && number < 20)
word = word + ones[number - 1];