سلام دوستان عزیز . در این تاپیک ، کد تبدیل عدد به متن انگلیسی در سی شارپ رو براتون آماده کردم.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class NumberToEnglish
{
public NumberToEnglish()
{
// TODO: Add constructor logic here
}
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/Rupees
endStr = (isCurrency) ? ("Rupees " + endStr) : ("");
pointStr = translateRupees(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;
//if (Convert.ToInt32(number) > 0)
place = " Hundred ";
break;
case 4: //thousands' range
case 5:
pos = (numDigits % 4) + 1;
//if (Convert.ToInt32(number) > 0)
place = " Thousand ";
break;
case 6:
case 7: //millions' range
pos = (numDigits % 6) + 1;
//if (Convert.ToInt32(number) > 0)
place = " Lacs ";
break;
case 8:
case 9:
case 10: //Billions's range
pos = (numDigits % 8) + 1;
//if (Convert.ToInt32(number) > 0)
place = " Crore ";
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!!)
//if (place != "")
//{
string str1 = translateWholeNumber(number.Substring(0, pos));
string str2 = "";
if (!string.IsNullOrEmpty(str1))
{
str2 = place;
}
string str3 = translateWholeNumber(number.Substring(pos));
word = str1 + str2 + str3;
//word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
//}
//check for trailing zeros
if (beginsZero)
{
if (!string.IsNullOrEmpty(str1) && !string.IsNullOrEmpty(str2))
{
if (!word.Contains(" and "))
{
//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 translateRupees(String Rupees)
{
String cts = "", digit = "", engOne = "";
for (int i = 0; i < Rupees.Length; i++)
{
digit = Rupees[i].ToString();
if (digit.Equals("0"))
{
engOne = "Zero";
}
else
{
engOne = ones(digit);
}
cts += " " + engOne;
}
return cts;
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class NumberToEnglish
{
public NumberToEnglish()
{
// TODO: Add constructor logic here
}
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/Rupees
endStr = (isCurrency) ? ("Rupees " + endStr) : ("");
pointStr = translateRupees(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;
//if (Convert.ToInt32(number) > 0)
place = " Hundred ";
break;
case 4: //thousands' range
case 5:
pos = (numDigits % 4) + 1;
//if (Convert.ToInt32(number) > 0)
place = " Thousand ";
break;
case 6:
case 7: //millions' range
pos = (numDigits % 6) + 1;
//if (Convert.ToInt32(number) > 0)
place = " Lacs ";
break;
case 8:
case 9:
case 10: //Billions's range
pos = (numDigits % 8) + 1;
//if (Convert.ToInt32(number) > 0)
place = " Crore ";
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!!)
//if (place != "")
//{
string str1 = translateWholeNumber(number.Substring(0, pos));
string str2 = "";
if (!string.IsNullOrEmpty(str1))
{
str2 = place;
}
string str3 = translateWholeNumber(number.Substring(pos));
word = str1 + str2 + str3;
//word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
//}
//check for trailing zeros
if (beginsZero)
{
if (!string.IsNullOrEmpty(str1) && !string.IsNullOrEmpty(str2))
{
if (!word.Contains(" and "))
{
//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 translateRupees(String Rupees)
{
String cts = "", digit = "", engOne = "";
for (int i = 0; i < Rupees.Length; i++)
{
digit = Rupees[i].ToString();
if (digit.Equals("0"))
{
engOne = "Zero";
}
else
{
engOne = ones(digit);
}
cts += " " + engOne;
}
return cts;
}
}
در پناه حق پیروز و موفق باشید