12,829,316 members (38,031 online)
alternative version

Stats

123.1K views
31 bookmarked
Posted 11 Oct 2006

How to Convert a Numeric Value or Currency to English Words Using C#

, 11 Oct 2006 CPOL
 Rate this:
This article includes a sample application that will show you how to convert a numeric value to an English word representation.

Introduction

After looking around the web for this functionality and failing to get an answer to my problem. I decided to spare some minutes and develop this functionality up to my requirement.

I've decided to share with developers out who may require it.

The program accepts numbers/numeric values as input and outputs an an English word representation.It accepts numbers ranging from 1 to some billions.

Here is the code:

```using System;
namespace custom.util
{
public class NumberToEnglish
{
public String changeNumericToWords(double numb)
{
String num = numb.ToString();
return changeToWords(num, false);
}
public String changeCurrencyToWords(String numb)
{
return changeToWords(numb, true);
}
public String changeNumericToWords(String numb)
{
return changeToWords(numb, false);
}
public String changeCurrencyToWords(double numb)
{
return changeToWords(numb.ToString(), true);
}
private String changeToWords(String numb, bool isCurrency)
{
String val = "", wholeNo = numb, points = "", andStr = "", pointStr="";
String endStr = (isCurrency) ? ("Only") : ("");
try
{
int decimalPlace = numb.IndexOf(".");
if (decimalPlace > 0)
{
wholeNo = numb.Substring(0, decimalPlace);
points = numb.Substring(decimalPlace+1);
if (Convert.ToInt32(points) > 0)
{
andStr = (isCurrency)?("and"):("point");// just to separate whole numbers from points/cents
endStr = (isCurrency) ? ("Cents "+endStr) : ("");
pointStr = translateCents(points);
}
}
val = String.Format("{0} {1}{2} {3}",translateWholeNumber(wholeNo).Trim(),andStr,pointStr,endStr);
}
catch { ;}
return val;
}
private String translateWholeNumber(String number)
{
string word = "";
try
{
bool beginsZero = false;//tests for 0XX
bool isDone = false;//test if already translated
double dblAmt = (Convert.ToDouble(number));
//if ((dblAmt > 0) && number.StartsWith("0"))
if (dblAmt > 0)
{//test for zero or digit zero in a nuemric
beginsZero = number.StartsWith("0");
int numDigits = number.Length;
int pos = 0;//store digit grouping
String place = "";//digit grouping name:hundres,thousand,etc...
switch (numDigits)
{
case 1://ones' range
word = ones(number);
isDone = true;
break;
case 2://tens' range
word = tens(number);
isDone = true;
break;
case 3://hundreds' range
pos = (numDigits % 3) + 1;
place = " Hundred ";
break;
case 4://thousands' range
case 5:
case 6:
pos = (numDigits % 4) + 1;
place = " Thousand ";
break;
case 7://millions' range
case 8:
case 9:
pos = (numDigits % 7) + 1;
place = " Million ";
break;
case 10://Billions's range
pos = (numDigits % 10) + 1;
place = " Billion ";
break;
//add extra case options for anything above Billion...
default:
isDone = true;
break;
}
if (!isDone)
{//if transalation is not done, continue...(Recursion comes in now!!)
word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
//check for trailing zeros
if (beginsZero) word = " and " + word.Trim();
}
//ignore digit grouping names
if (word.Trim().Equals(place.Trim())) word = "";
}
}
catch { ;}
return word.Trim();
}
private String tens(String digit)
{
int digt = Convert.ToInt32(digit);
String name = null;
switch (digt)
{
case 10:
name = "Ten";
break;
case 11:
name = "Eleven";
break;
case 12:
name = "Twelve";
break;
case 13:
name = "Thirteen";
break;
case 14:
name = "Fourteen";
break;
case 15:
name = "Fifteen";
break;
case 16:
name = "Sixteen";
break;
case 17:
name = "Seventeen";
break;
case 18:
name = "Eighteen";
break;
case 19:
name = "Nineteen";
break;
case 20:
name = "Twenty";
break;
case 30:
name = "Thirty";
break;
case 40:
name = "Fourty";
break;
case 50:
name = "Fifty";
break;
case 60:
name = "Sixty";
break;
case 70:
name = "Seventy";
break;
case 80:
name = "Eighty";
break;
case 90:
name = "Ninety";
break;
default:
if (digt > 0)
{
name = tens(digit.Substring(0, 1) + "0") + " " + ones(digit.Substring(1));
}
break;
}
return name;
}
private String ones(String digit)
{
int digt = Convert.ToInt32(digit);
String name = "";
switch (digt)
{
case 1:
name = "One";
break;
case 2:
name = "Two";
break;
case 3:
name = "Three";
break;
case 4:
name = "Four";
break;
case 5:
name = "Five";
break;
case 6:
name = "Six";
break;
case 7:
name = "Seven";
break;
case 8:
name = "Eight";
break;
case 9:
name = "Nine";
break;
}
return name;
}
private String translateCents(String cents)
{
String cts = "", digit = "", engOne = "";
for (int i = 0; i < cents.Length; i++)
{
digit = cents[i].ToString();
if (digit.Equals("0"))
{
engOne = "Zero";
}
else
{
engOne = ones(digit);
}
cts += " " + engOne;
}
return cts;
}
}
}```

Share

 Web Developer Uganda
No Biography provided

You may also be interested in...

 Pro Pro

 First PrevNext
 Correct Solution Please shrikar reddy23-Feb-17 19:46 shrikar reddy 23-Feb-17 19:46
 Code error Member 1141776817-Jan-16 20:33 Member 11417768 17-Jan-16 20:33
 Re: Code error shrikar reddy23-Feb-17 19:55 shrikar reddy 23-Feb-17 19:55
 error in conversion Tshencho4-Jan-16 18:31 Tshencho 4-Jan-16 18:31
 Thanks for you help!!! Quoclki6-Sep-15 18:24 Quoclki 6-Sep-15 18:24
 wrong output Member 1040915822-May-15 21:51 Member 10409158 22-May-15 21:51
 thank u fred srigates24-Apr-13 21:17 srigates 24-Apr-13 21:17
 Here is a VB.NET one that does the same thing in 23 lines. enjoy! Member 389485415-Mar-13 9:38 Member 3894854 15-Mar-13 9:38
 My vote of 1 Sergey Alexandrovich Kryukov25-Jan-13 10:16 Sergey Alexandrovich Kryukov 25-Jan-13 10:16
 Error lakshantha25-Oct-12 19:14 lakshantha 25-Oct-12 19:14
 Conversion Error JL Ruatpuia13-Aug-12 10:35 JL Ruatpuia 13-Aug-12 10:35
 Good work Menon Santosh12-Oct-11 20:51 Menon Santosh 12-Oct-11 20:51
 Re: Good work vijay_dahite3-Oct-15 19:21 vijay_dahite 3-Oct-15 19:21
 Fails on 1020 dhilsen3020-Aug-10 20:08 dhilsen30 20-Aug-10 20:08
 Re: Fails on 1020 JL Ruatpuia13-Aug-12 10:37 JL Ruatpuia 13-Aug-12 10:37
 Formatting Code KunalChowdhury21-Jul-10 9:26 KunalChowdhury 21-Jul-10 9:26
 Thanks mate dm7920-Jun-10 17:05 dm79 20-Jun-10 17:05
 Fails on 10020 arun_kvm18-Nov-09 19:05 arun_kvm 18-Nov-09 19:05
 WARNING: FAILS ON 10001, 1000001 fix_a_fix3-Jun-08 4:28 fix_a_fix 3-Jun-08 4:28
 Simpler solution marschills31-Jan-08 5:19 marschills 31-Jan-08 5:19
 great amirmuthu17-Oct-07 5:47 amirmuthu 17-Oct-07 5:47
 Hack for Negative Numbers sandman_68130-Jul-07 16:47 sandman_681 30-Jul-07 16:47
 Nice One Boipelo27-Mar-07 1:53 Boipelo 27-Mar-07 1:53
 thanks Bill teligaurav9-Feb-07 3:05 teligaurav 9-Feb-07 3:05
 Check this Out Bill Pierce11-Oct-06 10:48 Bill Pierce 11-Oct-06 10:48
 Last Visit: 31-Dec-99 19:00     Last Update: 29-Mar-17 18:32 Refresh 12 Next »

General    News    Suggestion    Question    Bug    Answer    Joke    Praise    Rant    Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.