Numeric to English Text

  1. using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Web;  
  5. using System.Web.Security;  
  6. using System.Web.UI;  
  7. using System.Web.UI.WebControls;  
  8. using System.Web.UI.WebControls.WebParts;  
  9. using System.Web.UI.HtmlControls;  
  10. /// <summary>  
  11. /// Summary description for NumberToEnglish  
  12. /// </summary>  
  13. public class NumberToEnglish  
  14. {  
  15.     public NumberToEnglish()  
  16.     {  
  17.         //  
  18.         // TODO: Add constructor logic here  
  19.         //  
  20.     }  
  21.     public String changeNumericToWords(double numb)  
  22.     {  
  23.         String num = numb.ToString();  
  24.         return changeToWords(num, false);  
  25.     }  
  26.     public String changeCurrencyToWords(String numb)  
  27.     {  
  28.         return changeToWords(numb, true);  
  29.     }  
  30.     public String changeNumericToWords(String numb)  
  31.     {  
  32.         return changeToWords(numb, false);  
  33.     }  
  34.     public String changeCurrencyToWords(double numb)  
  35.     {  
  36.         return changeToWords(numb.ToString(), true);  
  37.     }  
  38.     private String changeToWords(String numb, bool isCurrency)  
  39.     {  
  40.         String val = "", wholeNo = numb, points = "", andStr = "", pointStr = "";  
  41.         String endStr = (isCurrency) ? ("Only") : ("");  
  42.         try  
  43.         {  
  44.             int decimalPlace = numb.IndexOf(".");  
  45.             if (decimalPlace > 0)  
  46.             {  
  47.                 wholeNo = numb.Substring(0, decimalPlace);  
  48.                 points = numb.Substring(decimalPlace + 1);  
  49.                 if (Convert.ToInt32(points) > 0)  
  50.                 {  
  51.                     andStr = (isCurrency) ? ("and") : ("Point"); // just to separate whole numbers from points/Rupees  
  52.                     endStr = (isCurrency) ? ("Rupees " + endStr) : ("");  
  53.                     pointStr = translateRupees(points);  
  54.                 }  
  55.             }  
  56.             val = String.Format("{0} {1}{2} {3}", translateWholeNumber(wholeNo).Trim(), andStr, pointStr, endStr);  
  57.         }  
  58.         catch  
  59.         {;  
  60.         }  
  61.         return val;  
  62.     }  
  63.     private String translateWholeNumber(String number)  
  64.     {  
  65.         string word = "";  
  66.         try  
  67.         {  
  68.             bool beginsZero = false//tests for 0XX  
  69.             bool isDone = false//test if already translated  
  70.             double dblAmt = (Convert.ToDouble(number));  
  71.             //if ((dblAmt > 0) && number.StartsWith("0"))  
  72.             if (dblAmt > 0)  
  73.             { //test for zero or digit zero in a nuemric  
  74.                 beginsZero = number.StartsWith("0");  
  75.                 int numDigits = number.Length;  
  76.                 int pos = 0; //store digit grouping  
  77.                 String place = ""//digit grouping name:hundres,thousand,etc...  
  78.                 switch (numDigits)  
  79.                 {  
  80.                     case 1: //ones' range  
  81.                         word = ones(number);  
  82.                         isDone = true;  
  83.                         break;  
  84.                     case 2: //tens' range  
  85.                         word = tens(number);  
  86.                         isDone = true;  
  87.                         break;  
  88.                     case 3: //hundreds' range  
  89.                         pos = (numDigits % 3) + 1;  
  90.                         //if (Convert.ToInt32(number) > 0)  
  91.                         place = " Hundred ";  
  92.                         break;  
  93.                     case 4: //thousands' range  
  94.                     case 5:  
  95.                         pos = (numDigits % 4) + 1;  
  96.                         //if (Convert.ToInt32(number) > 0)  
  97.                         place = " Thousand ";  
  98.                         break;  
  99.                     case 6:  
  100.                     case 7: //millions' range  
  101.                         pos = (numDigits % 6) + 1;  
  102.                         //if (Convert.ToInt32(number) > 0)  
  103.                         place = " Lacs ";  
  104.                         break;  
  105.                     case 8:  
  106.                     case 9:  
  107.                     case 10: //Billions's range  
  108.                         pos = (numDigits % 8) + 1;  
  109.                         //if (Convert.ToInt32(number) > 0)  
  110.                         place = " Crore ";  
  111.                         break;  
  112.                         //add extra case options for anything above Billion...  
  113.                     default:  
  114.                         isDone = true;  
  115.                         break;  
  116.                 }  
  117.                 if (!isDone)  
  118.                 { //if transalation is not done, continue...(Recursion comes in now!!)  
  119.                     //if (place != "")  
  120.                     //{  
  121.                     string str1 = translateWholeNumber(number.Substring(0, pos));  
  122.                     string str2 = "";  
  123.                     if (!string.IsNullOrEmpty(str1))  
  124.                     {  
  125.                         str2 = place;  
  126.                     }  
  127.                     string str3 = translateWholeNumber(number.Substring(pos));  
  128.                     word = str1 + str2 + str3;  
  129.                     //word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));  
  130.                     //}  
  131.                     //check for trailing zeros  
  132.                     if (beginsZero)  
  133.                     {  
  134.                         if (!string.IsNullOrEmpty(str1) && !string.IsNullOrEmpty(str2))  
  135.                         {  
  136.                             if (!word.Contains(" and "))  
  137.                             {  
  138.                                 //word = " and " + word.Trim();  
  139.                             }  
  140.                         }  
  141.                     }  
  142.                 }  
  143.                 //ignore digit grouping names  
  144.                 if (word.Trim().Equals(place.Trim()))  
  145.                 {  
  146.                     word = "";  
  147.                 }  
  148.             }  
  149.         }  
  150.         catch  
  151.         {;  
  152.         }  
  153.         return word.Trim();  
  154.     }  
  155.     private String tens(String digit)  
  156.     {  
  157.         int digt = Convert.ToInt32(digit);  
  158.         String name = null;  
  159.         switch (digt)  
  160.         {  
  161.             case 10:  
  162.                 name = "Ten";  
  163.                 break;  
  164.             case 11:  
  165.                 name = "Eleven";  
  166.                 break;  
  167.             case 12:  
  168.                 name = "Twelve";  
  169.                 break;  
  170.             case 13:  
  171.                 name = "Thirteen";  
  172.                 break;  
  173.             case 14:  
  174.                 name = "Fourteen";  
  175.                 break;  
  176.             case 15:  
  177.                 name = "Fifteen";  
  178.                 break;  
  179.             case 16:  
  180.                 name = "Sixteen";  
  181.                 break;  
  182.             case 17:  
  183.                 name = "Seventeen";  
  184.                 break;  
  185.             case 18:  
  186.                 name = "Eighteen";  
  187.                 break;  
  188.             case 19:  
  189.                 name = "Nineteen";  
  190.                 break;  
  191.             case 20:  
  192.                 name = "Twenty";  
  193.                 break;  
  194.             case 30:  
  195.                 name = "Thirty";  
  196.                 break;  
  197.             case 40:  
  198.                 name = "Fourty";  
  199.                 break;  
  200.             case 50:  
  201.                 name = "Fifty";  
  202.                 break;  
  203.             case 60:  
  204.                 name = "Sixty";  
  205.                 break;  
  206.             case 70:  
  207.                 name = "Seventy";  
  208.                 break;  
  209.             case 80:  
  210.                 name = "Eighty";  
  211.                 break;  
  212.             case 90:  
  213.                 name = "Ninety";  
  214.                 break;  
  215.             default:  
  216.                 if (digt > 0)  
  217.                 {  
  218.                     name = tens(digit.Substring(0, 1) + "0") + " " + ones(digit.Substring(1));  
  219.                 }  
  220.                 break;  
  221.         }  
  222.         return name;  
  223.     }  
  224.     private String ones(String digit)  
  225.     {  
  226.         int digt = Convert.ToInt32(digit);  
  227.         String name = "";  
  228.         switch (digt)  
  229.         {  
  230.             case 1:  
  231.                 name = "One";  
  232.                 break;  
  233.             case 2:  
  234.                 name = "Two";  
  235.                 break;  
  236.             case 3:  
  237.                 name = "Three";  
  238.                 break;  
  239.             case 4:  
  240.                 name = "Four";  
  241.                 break;  
  242.             case 5:  
  243.                 name = "Five";  
  244.                 break;  
  245.             case 6:  
  246.                 name = "Six";  
  247.                 break;  
  248.             case 7:  
  249.                 name = "Seven";  
  250.                 break;  
  251.             case 8:  
  252.                 name = "Eight";  
  253.                 break;  
  254.             case 9:  
  255.                 name = "Nine";  
  256.                 break;  
  257.         }  
  258.         return name;  
  259.     }  
  260.     private String translateRupees(String Rupees)  
  261.     {  
  262.         String cts = "", digit = "", engOne = "";  
  263.         for (int i = 0; i < Rupees.Length; i++)  
  264.         {  
  265.             digit = Rupees[i].ToString();  
  266.             if (digit.Equals("0"))  
  267.             {  
  268.                 engOne = "Zero";  
  269.             }  
  270.             else  
  271.             {  
  272.                 engOne = ones(digit);  
  273.             }  
  274.             cts += " " + engOne;  
  275.         }  
  276.         return cts;  
  277.     }  
  278. }