PDA

View Full Version : سوال: سورس تبدیل رقم به حروف



ghasem110deh
سه شنبه 18 آذر 1393, 14:19 عصر
سلام
این سورس توی برنامه اشتفاده کردم واسه تبدیل رقم به حروف :

public static string GET_Number_To_PersianString(string TXT) {
string RET = " ", STRVA = " ";
string[] MainStr = STR_To_Int(TXT);
int Q = 0;
for (int i = MainStr.Length - 1; i >= 0; i--)
{
STRVA = " ";
if (RET != " " && RET != null)
STRVA = " و ";
RET = Convert_STR(GETCountStr(MainStr[i]), Q) + STRVA + RET;
Q++;
}
if (RET == " " || RET == null || RET == " ")
RET = "صفر";
return RET;
}


private static string[] STR_To_Int(string STR)
{
STR = GETCountStr(STR);
string[] RET = new string[STR.Length / 3];
int Q = 0;
for (int I = 0; I < STR.Length; I += 3)
{
RET[Q] = STR.Substring(I, 3);
Q++;
}
return RET;
}


private static string GETCountStr(string STR)
{
string RET = STR;
int LEN = (STR.Length / 3 + 1) * 3 - STR.Length;
if (LEN < 3)
{
for (int i = 0; i < LEN; i++)
{
RET = "0" + RET;
}
}
if (RET == "")
return "000";
return RET;
}


private static string Convert_STR(string INT, int Count)
{
string RET = "";
//یک صد
if (Count == 0)
{
if (INT.Substring(1, 1) == "1" && INT.Substring(2, 1) != "0")
{
RET = GET_Number(3, Convert.ToInt32(INT.Substring(0, 1)), " ") + GET_Number(1, Convert.ToInt32(INT.Substring(2, 1)), "");
}
else
{
string STR = GET_Number(0, Convert.ToInt32(INT.Substring(2, 1)), "");
RET = GET_Number(3, Convert.ToInt32(INT.Substring(0, 1)), GET_Number(2, Convert.ToInt32(INT.Substring(1, 1)), "") + STR) + GET_Number(2, Convert.ToInt32(INT.Substring(1, 1)), STR) + GET_Number(0, Convert.ToInt32(INT.Substring(2, 1)), "");
}
}
//هزار
else if (Count == 1)
{
RET = Convert_STR(INT, 0);
RET += " هزار";
}
//میلیون
else if (Count == 2)
{
RET = Convert_STR(INT, 0);
RET += " میلیون";
}
//میلیارد
else if (Count == 3)
{
RET = Convert_STR(INT, 0);
RET += " میلیارد";
}
//میلیارد
else if (Count == 4)
{
RET = Convert_STR(INT, 0);
RET += " تیلیارد";
}
//میلیارد
else if (Count == 5)
{
RET = Convert_STR(INT, 0);
RET += " بیلیارد";
}
else
{
RET = Convert_STR(INT, 0);
RET += Count.ToString();
}
return RET;
}


private static string GET_Number(int Count, int Number, string VA)
{
string RET = "";


if (VA != "" && VA != null)
{
VA = " و ";
}
if (Count == 0 || Count == 1)
{
bool IsDah = Convert.ToBoolean(Count);
string[] MySTR = new string[10];
MySTR[1] = IsDah ? "یازده" : "یک" + VA;
MySTR[2] = IsDah ? "دوازده" : "دو" + VA;
MySTR[3] = IsDah ? "سیزده" : "سه" + VA;
MySTR[4] = IsDah ? "چهارده" : "چهار" + VA;
MySTR[5] = IsDah ? "پانزده" : "پنج" + VA;
MySTR[6] = IsDah ? "شانزده" : "شش" + VA;
MySTR[7] = IsDah ? "هفده" : "هفت" + VA;
MySTR[8] = IsDah ? "هجده" : "هشت" + VA;
MySTR[9] = IsDah ? "نوزده" : "نه" + VA;
return MySTR[Number];
}
else if (Count == 2)
{
string[] MySTR = new string[10];
MySTR[1] = "ده";
MySTR[2] = "بیست" + VA;
MySTR[3] = "سی" + VA;
MySTR[4] = "چهل" + VA;
MySTR[5] = "پنجاه" + VA;
MySTR[6] = "شصت" + VA;
MySTR[7] = "هفتاد" + VA;
MySTR[8] = "هشتاد" + VA;
MySTR[9] = "نود" + VA;
return MySTR[Number];
}
else if (Count == 3)
{
string[] MySTR = new string[10];
MySTR[1] = "یکصد" + VA;
MySTR[2] = "دویست" + VA;
MySTR[3] = "سیصد" + VA;
MySTR[4] = "چهارصد" + VA;
MySTR[5] = "پانصد" + VA;
MySTR[6] = "ششصد" + VA;
MySTR[7] = "هفتصد" + VA;
MySTR[8] = "هشتصد" + VA;
MySTR[9] = "نهصد" + VA;
return MySTR[Number];
}
return RET;

اما وقتی عدد با صفر تموم شده درست کار نمیکنه ؛ مثلا :
1.000.000 رو --> یک میلیون و هزار و نشون میده
یا 100001 رو --> یکصد هزار و هزارو یک ..................... اما اگه توی رقم صفر نباشه درست کار میکنه !
کجاش ایراد داره ؟
یا اگر کامپوننت درستی هست معرفی کنید ؟

Share & Learn
سه شنبه 18 آذر 1393, 14:45 عصر
سلام
یه تابع برای این کار نوشتم، دیگه خودتون بنا به نیازتون گسترشش بدید


public static string NumberToWords(int number)
{
if (number == 0)
{
return "صفر";
}
if (number < 0)
{
return " منفی " + NumberToWords(Math.Abs(number));
}

string words = "";

if ((number / 1000000) > 0)
{
words += NumberToWords(number / 1000000) + " میلیون ";
number %= 1000000;
}
if ((number / 1000) > 0)
{
words += NumberToWords(number / 1000) + " هزار ";
number %= 1000;
}
if ((number / 100) > 0)
{
words += NumberToWords(number / 100) + " صد ";
number %= 100;
}

if (number > 0)
{
if (words != "")
{
words += "و ";
}

var Units = new[] { "صفر", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه", "ده", "یازده", "دوازده", "سیزده", "چهرده", "پانزده", "شانزده", "هفده", "هجده", "نوزده" };
var Tens = new[] { "صفر", "ده", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود" };

if (number < 20)
{
words += Units[number];
}
else
{
words += Tens[number / 10];
if ((number % 10) > 0)
{
words += " و " + Units[number % 10];
}
}
}
return words;
}


موفق باشید

davidrobert
سه شنبه 18 آذر 1393, 17:38 عصر
بفرمایید این سورس تبدیل عدد به حرفو هستش ولی عدد باید به صورت اعشار جدا شده باشه برای مقدرا پول هستش.
http://uplod.ir/8xk7yko6k6f4/ClsConvertNumbertToString.cs.htm

این هم طریقه استفادش
LblCharCost.Text = "جمع کل به حروف: " + ClsConvertNumbertToString.ConvertRaghamToHorof(Lbl CostNumber.Text) + " ريال";

mohammadreza_jamaali
سه شنبه 18 آذر 1393, 20:00 عصر
سلام من اینو برای اعداد یونانی تو vb.net نوشته بودم باکمی تغیر میشه برا این کاربرد استفاده کرد
Public Class Form1 Function convert(ByVal x As Integer) As String
Select Case (x)
Case 1
Return "I"
Case 2
Return "II"
Case 3
Return "III"
Case 4
Return "IV"
Case 5
Return "V"
Case 6
Return "VI"
Case 7
Return "VII"
Case 8
Return "VIII"
Case 9
Return "IX"
Case 10
Return "X"
End Select
End Function
Function convertd(ByVal x As Integer) As String
Select Case (x)
Case 1
Return "X"
Case 2
Return "XX"
Case 3
Return "XXX"
Case 4
Return "XL"
Case 5
Return "L"
Case 6
Return "LX"
Case 7
Return "LXX"
Case 8
Return "LXXX"
Case 9
Return "XC"
Case 10
Return "C"
End Select
End Function
Function converts(ByVal x As Integer) As String
Select Case (x)
Case 1
Return "C"
Case 2
Return "CC"
Case 3
Return "CCC"
Case 4
Return "CD"
Case 5
Return "D"
Case 6
Return "DC"
Case 7
Return "DCC"
Case 8
Return "DCCC"
Case 9
Return "CM"
Case 10
Return "M"
End Select
End Function


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim a, b, c As String
Dim x, m, d As Integer
x = Val(TextBox1.Text)
If x <= 10 Then
a = convert(x)
lblAnswer.Text = a
ElseIf (x > 10 And x <= 100) Then
m = x Mod 10
a = convert(m)
d = x \ 10
b = convertd(d)
lblAnswer.Text = b + a
ElseIf (x >= 100 And x <= 1000) Then
m = x Mod 10
a = convert(m)
x = x \ 10
d = x Mod 10
b = convertd(d)
x = x \ 10
c = converts(x)
lblAnswer.Text = c + b + a
End If


End Sub


End Class