This is another program I ended up writing for a homework assignment (though I went far beyond the requirements). I learned how to easily convert numbers of integer type to words. It was slightly more difficult to allow doubles to be converted but I was able to be successful in that implementation as well. The following script allows a user to specify a double down to 7 decimal places (ten-millionths) and convert that number into a string of words/amount.
Edit: Originally this only supported the millions place. Now it supports very large numbers when you do not specify a decimal point. I am still working out some kinks to try and make the program support very large decimal numbers when a decimal point is used. Any constructive criticism welcome ![]()
Source Code for Console Application C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NumWords
{
class Program
{
// PROGRAM HANDLES NEGATIVE AND POSITIVE DOUBLES
static String NumWordsWrapper(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;
}
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 % Math.Pow(10, power) > 0)
{
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;
}
static void Main(string[] args)
{
Console.Write("Enter a number to convert to words: ");
Double n = Double.Parse(Console.ReadLine());
Console.WriteLine("{0}", NumWordsWrapper(n));
}
}
}
Edited by EC_Joe, 29 January 2013 - 09:02 AM.
Fixed Index Out of bounds for numbers ending in 0














