Monday, March 14, 2011

Class to convert Number to Gujarati

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace (Project Name)
{
public class NumberToGujarati
{
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") : ("");
String endStr = (isCurrency) ? ("Paura") : ("");
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) : ("");
endStr = (isCurrency) ? ("Paisa " + 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));
double tm = (Convert.ToDouble(number));
int newnm = 0;
double rm = 0;
string strfst;
string tmpnumber = number.ToString();
//if ((dblAmt > 0) && number.StartsWith("0"))
if (dblAmt > 0)
{//test for zero or digit zero in a nuemric
beginsZero = number.StartsWith("0");

int numDigits = tmpnumber.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
rm = tm / 100;
newnm = (int)Math.Floor(rm);
pos = (numDigits % 3) + 1;
place = " so ";
//strfst = tmpnumber.Substring(0, pos);
//if (strfst == "2" || strfst == "02")
// place = " bso ";
//else
//if (newnm == 2)
//{
// place = " bso ";
//}
//else
//{
// if (strfst != "0")
// place = " so ";
//}

//if (newnm == 2)
//{
// number = tmpnumber.Substring(pos, tmpnumber.Length - 1);
//}
break;
case 4://thousands' range
case 5:
pos = (numDigits % 4) + 1;
strfst = tmpnumber.Substring(0, pos);
if (strfst != "0" && strfst != "00")
place = " H=r ";
//number = tmpnumber.Substring(pos, tmpnumber.Length - 1);
break;
case 6:
case 7://millions' range
pos = (numDigits % 6) + 1;
place = " Laaq ";
break;
case 8:
case 9:
pos = (numDigits % 8) + 1;
place = " kroD ";
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();
if (beginsZero) word = " " + 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 = "ds";//"Ten"
break;
case 11:
name = "Aigyar";//"Eleven"
break;
case 12:
name = "Baar";//"Twelve"
break;
case 13:
name = "Taer";//"Thirteen"
break;
case 14:
name = "CoEad";//"Fourteen"
break;
case 15:
name = "Pa>dr";//"Fifteen"
break;
case 16:
name = "Soa5";//"Sixteen"
break;
case 17:
name = "SaTtr";//"Seventeen"
break;
case 18:
name = "A!ar";//"Eighteen"
break;
case 19:
name = "Aog~aIs";//"Nineteen"
break;
case 20:
name = "vIs";
break;
case 21:
name = "AekvIs";
break;
case 22:
name = "BaavIs";
break;
case 23:
name = "TaevIs";
break;
case 24:
name = "covIs";
break;
case 25:
name = "pCcIs";
break;
case 26:
name = "0vIs";
break;
case 27:
name = "sTtavIs";
break;
case 28:
name = "A#avIs";
break;
case 29:
name = "Aog~at/Is";
break;
case 30:
name = " t/Is";
break;
case 31:
name = "Aet/Is";
break;
case 32:
name = "bt/Is";
break;
case 33:
name = "tet/Is";
break;
case 34:
name = "cot/Is";
break;
case 35:
name = "p>at/Is";
break;
case 36:
name = "0t/Is";
break;
case 37:
name = "Saa\\Dt/Is";
break;
case 38:
name = "AaDt/Is";
break;
case 39:
name = "Aog~acalIs";
break;
case 40:
name = "calIs";
break;
case 41:
name = "AektalIs";
break;
case 42:
name = "betalIs";
break;
case 43:
name = "tetalIs";
break;
case 44:
name = "cu>malIs";
break;
case 45:
name = "ipStalIs";
break;
case 46:
name = "0etalIs";
break;
case 47:
name = "suDtalIs";
break;
case 48:
name = "ADtalIs";
break;
case 49:
name = "Aog`pcas";
break;
case 50:
name = "pcas";
break;
case 51:
name = "Aekavn";
break;
case 52:
name = "Baavn";
break;
case 53:
name = "Taepn";
break;
case 54:
name = "copn";
break;
case 55:
name = "p>cavn";
break;
case 56:
name = "0Ppn";
break;
case 57:
name = "sTtavn";
break;
case 58:
name = "A#avn";
break;
case 59:
name = "Aog~asa[#";
break;
case 60:
name = "sa[#";
break;
case 61:
name = "Aeks#";
break;
case 62:
name = "Baas#";
break;
case 63:
name = "etes#";
break;
case 64:
name = "cos#";
break;
case 65:
name = "pa>s#";
break;
case 66:
name = "0as#";
break;
case 67:
name = "sDs#";
break;
case 68:
name = "ADs#";
break;
case 69:
name = "Ag`oisTter";
break;
case 70:
name = "isTter";
break;
case 71:
name = "{Kotr";
break;
case 72:
name = "Baaeter";
break;
case 73:
name = "Taoter";
break;
case 74:
name = "cumoter";
break;
case 75:
name = "p>coter";
break;
case 76:
name = "0oter";
break;
case 77:
name = "isTyotr";
break;
case 78:
name = "{#yotr";
break;
case 79:
name = "Ag~yaAe>sI";
break;
case 80:
name = "Ae>sI";
break;
case 81:
name = "AekyasI";
break;
case 82:
name = "ByasI";
break;
case 83:
name = "TyasI";
break;
case 84:
name = "coyaRsI";
break;
case 85:
name = "p>casI";
break;
case 86:
name = "0yasI";
break;
case 87:
name = "isTyasI";
break;
case 88:
name = "{#yasI";
break;
case 89:
name = "neVyasI";
break;
case 90:
name = "nev>u";
break;
case 91:
name = "Aeka`u>";
break;
case 92:
name = "Baa`u>";
break;
case 93:
name = "Taa`u>";
break;
case 94:
name = "Caora`u>";
break;
case 95:
name = "p>ca`u>";
break;
case 96:
name = "0Nnu>";
break;
case 97:
name = "sTta`u>";
break;
case 98:
name = "A#a`u>";
break;
case 99:
name = "nVva`u>";
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 = "Aek";//"One"
break;
case 2:
name = "be";//"Two"
break;
case 3:
name = "t/~a";//"Three"
break;
case 4:
name = "Caar";//"Four"
break;
case 5:
name = "Pa>ac";//"Five"
break;
case 6:
name = "0";//"Six"
break;
case 7:
name = "Saat";//"Seven"
break;
case 8:
name = "Aa#";//"Eight"
break;
case 9:
name = "Nav";//"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 = "";
}
else
{
engOne = ones(digit);
}
cts += " " + engOne;
}
return cts;
}
}
}

No comments:

Post a Comment