Last active
August 27, 2019 16:12
-
-
Save blitzblade/93e71ec4e2d8338d8d4725acbc817a05 to your computer and use it in GitHub Desktop.
[Number to words in C#] #c# #string #words #number
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static string NumberToWords(long number) | |
{ | |
if (number == 0) | |
return "zero"; | |
if (number < 0) | |
return "minus " + NumberToWords(Math.Abs(number)); | |
string words = ""; | |
if ((number / 1000000000) > 0) | |
{ | |
words += NumberToWords(number / 1000000000) + " billion "; | |
number %= 1000000000; | |
} | |
if ((number / 1000000) > 0) | |
{ | |
words += NumberToWords(number / 1000000) + " million "; | |
number %= 1000000; | |
} | |
if ((number / 1000) > 0) | |
{ | |
words += NumberToWords(number / 1000) + " thousand "; | |
number %= 1000; | |
} | |
if ((number / 100) > 0) | |
{ | |
words += NumberToWords(number / 100) + " hundred "; | |
number %= 100; | |
} | |
if (number > 0) | |
{ | |
if (words != "") | |
words += "and "; | |
var unitsMap = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; | |
var tensMap = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; | |
if (number < 20) | |
words += unitsMap[number]; | |
else | |
{ | |
words += tensMap[number / 10]; | |
if ((number % 10) > 0) | |
words += "-" + unitsMap[number % 10]; | |
} | |
} | |
return words; | |
} | |
public static string DecimalToWords(decimal number) | |
{ | |
if (number == 0) | |
return "zero"; | |
if (number < 0) | |
return "minus " + DecimalToWords(Math.Abs(number)); | |
string words = ""; | |
long intPortion = (long)number; | |
decimal fraction = (number - intPortion) * 100; | |
long decPortion = (long)fraction; | |
words = NumberToWords(intPortion); | |
if (decPortion > 0) | |
{ | |
words += " and "; | |
words += NumberToWords(decPortion); | |
} | |
return words; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment