public 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));
int subLenght = 0;
//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...
if (numDigits <= 12)
{
switch (numDigits)
{
case 1://ones' range
subLenght = 0;
// word = ones(number);
isDone = true;
break;
case 2://tens' range
subLenght = 1;
place = " ";
// word = tens(number);
// isDone = true;
break;
case 3://hundreds' range
subLenght = 2;
place = " Hundred ";
break;
case 4://thousands' range
subLenght = numDigits - 1;
place = " Thousand ";
break;
case 5:
subLenght = numDigits - 2;
place = " Thousand ";
break;
case 6:
subLenght = numDigits - 1;
place = " Lakh ";
break;
case 7:
subLenght = numDigits - 2;
place = " Lakh ";
break;
case 8:
subLenght = numDigits - 1;
place = " Crore ";
break;
case 9:
subLenght = numDigits - 2;
place = " Crore ";
break;
case 10:
subLenght = numDigits - 1;
place = " Million ";
break;
case 11://Billions's range
subLenght = numDigits - 1;
place = " Billion ";
break;
case 12://Billions's range
subLenght = numDigits - 2;
place = " Billion ";
break;
//add extra case options for anything above Billion...
default:
isDone = true;
break;
}
string newNumber = "";
if (numDigits >= 3)
newNumber = number.Substring(0, number.Length - subLenght);
else if (numDigits == 2)
newNumber = (Int32.Parse(number.Substring(0, 1)) * 10).ToString();
else
newNumber = number;
word = GetWord(Convert.ToInt32(newNumber)) + place;
number = number.Substring(number.Length - subLenght);
}
if (!isDone)
{
//if transalation is not done, continue...(Recursion comes in now!!)
word += TranslateWholeNumber(number);
//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 GetWord(int number)
{
string word = "";
if (number > 0 && number <>
word = Ones(number.ToString());
else
word = Tens(number.ToString());
return word;
}
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 <>
{
digit = cents[i].ToString();
if (digit.Equals("0"))
{
engOne = "Zero";
}
else
{
engOne = Ones(digit);
}
cts += " " + engOne;
}
return cts;
}
Call the main function
label1.Text = ChangeToWords(textBox1.Text.Trim(), true);
0 comments:
Post a Comment