PDA

View Full Version : تابع تبدیل عدد به حروف در سی شارپ



malloc
دوشنبه 24 مهر 1391, 16:35 عصر
سلام دوستان.
من یه نمونه کد میخوام که بتونم اعداد رو به حروف انگلیسی بنویسم.
یعنی من یه عددی دارم که میخوام اینو جدا جدا کنه و واسم به حروف انگلیسی بنویسه این چند تومنه.

Y_Safaiee
دوشنبه 24 مهر 1391, 16:49 عصر
با سلام خدمت شما

این کدهای تبدیل عدد به حروف فارسیه فقط لازمه جای حروف فارسی معادل انگلیسیشو بنویسین مثلا جای "و" میشه And



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

namespace NFMS
{
class PNumberTString
{
private static string[] yakan = new string[10] { "صفر", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه" };
private static string[] dahgan = new string[10] { "", "", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود" };
private static string[] dahyek = new string[10] { "ده", "یازده", "دوازده", "سیزده", "چهارده", "پانزده", "شانزده", "هفده", "هجده", "نوزده" };
private static string[] sadgan = new string[10] { "", "یکصد", "دویست", "سیصد", "چهارصد", "پانصد", "ششصد", "هفتصد", "هشتصد", "نهصد" };
private static string[] basex = new string[5] { "", "هزار", "میلیون", "میلیارد", "تریلیون" };
private static string getnum3(int num3)
{
string s = "";
int d3, d12;
d12 = num3 % 100;
d3 = num3 / 100;
if (d3 != 0)
s = sadgan[d3] + " و ";
if ((d12 >= 10) && (d12 <= 19))
{
s = s + dahyek[d12 - 10];
}
else
{
int d2 = d12 / 10;
if (d2 != 0)
s = s + dahgan[d2] + " و ";
int d1 = d12 % 10;
if (d1 != 0)
s = s + yakan[d1] + " و ";
s = s.Substring(0, s.Length - 3);
};
return s;
}
public string num2str(string snum)
{
string stotal = "";
if(snum =="") return "صفر";
if (snum == "0")
{
return yakan[0];
}
else
{
snum = snum.PadLeft(((snum.Length - 1) / 3 + 1) * 3, '0');
int L = snum.Length / 3 - 1;
for (int i = 0; i <= L; i++)
{
int b = int.Parse(snum.Substring(i * 3, 3));
if (b != 0)
stotal = stotal + getnum3(b) + " " + basex[L - i] + " و ";
}
stotal = stotal.Substring(0, stotal.Length - 3);
}
return stotal;
}
}
}




موفق باشین
بایت بایت

reza69
جمعه 04 اسفند 1391, 09:44 صبح
چجوری باید ازش استفاده کنیم؟
میخوام تو یه لیبل نوشته بشه

ali_habibi1384
جمعه 04 اسفند 1391, 14:37 عصر
ابزار txtProNet (تكست باكس حرفه اي) رو ميتونيد از اين لينك (http://barnamenevis.org/showthread.php?318486-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-%D8%AA%D9%83%D8%B3%D8%AA-%D8%A8%D8%A7%D9%83%D8%B3-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%D9%8A-%D8%A8%D8%A7%D9%83%D9%84%D9%8A-%D8%A7%D9%85%D9%83%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%B3%D9%88%D8%B1%D8%B3) يا از امضاي من دانلود كنيد. علاوه بر امكاني كه شما لازم داريد امكانات سريع و راحت تري رو هم در اختيار شما قرار ميده كه ديگه نياز به كد نويسي اضافي نداريد

reza69
جمعه 04 اسفند 1391, 18:41 عصر
فهمیدم چجوری میشه ازش استفاده کرد.

NumberToString dd = new NumberToString();
lbltakhfifbeh4.Text = dd.num2str(txttakhfif4.Text);

علی فتحی
جمعه 19 تیر 1394, 17:46 عصر
سلام اعداد دارای ممیز رو قبول نمیکنه

Amir4317
شنبه 20 تیر 1394, 12:47 عصر
سلام اعداد دارای ممیز رو قبول نمیکنه

عجب!
عدد قبل ممیز که خودشه + یه " ممیز " + عدد بعد ممیز + " دهم " | " صدم" | " هزارم " | " ... "
که این آخریه باید طول ارایه رو داشته باشی

کار سختی نیست به خدا! :متفکر:

علی فتحی
یک شنبه 21 تیر 1394, 00:42 صبح
باور کن قبول نمیکنه اینم اخطار :
int b = int.Parse(snum.Substring(i * 3,3));

Input string was not in a correct format.

mohsen.a.s.95
یک شنبه 21 تیر 1394, 00:59 صبح
درسته که قبول نمیکنه ولی توسعه کد برای قبول کردنش سخت نیست
همون طور که دوستمون گفتن کافیه از تابع دوبار استفاده بشه
یک بار برای عدد قبل از ممیز
یک بار برای عدد بعد از ممیز
حالا با توجه به تعداد ارقام عدد بعد از ممیز هم بایک سویچ کیس میشه دهم صدم هزارم و ... رو هم مشخص کرد

علی فتحی
یک شنبه 21 تیر 1394, 01:28 صبح
با تشکر : هر کاری کردم متصفانه موفق نشدم میشه کد بالا رو تغییر بدین برای قبول کردن . تا 3 رقم بعد ممیز رو قبول میکنه بقیه ش عمل نمیکنه

aliagamon
یک شنبه 21 تیر 1394, 07:52 صبح
شما اگه یه کم کرد دست کاری کنین همونطور که دوستان گفتن جواب میده راحت

NumberToString converter = new NumberToString();
if(!textBox1.Text.Contains("."))
textBox2.Text = converter.num2str(textBox1.Text);
else
{
string[] str = textBox1.Text.Split('.');
textBox2.Text = converter.num2str(str[0]);
textBox2.Text += " ممیز ";
textBox2.Text += converter.num2str(str[1]);
switch (str[1].Length)
{
case 1:
textBox2.Text += " دهم ";
break;
case 2:
textBox2.Text += " صدم ";
break;
case 3:
textBox2.Text += " هزارم ";
break;
default:
break;
}

البته میتونین همینو اصولی تر هم بنویسین و البته این تا 3 رقم اعشار درست کار میکنه خودتون بعد از هزارم خواستین اضافه کنین :لبخند:

علی فتحی
دوشنبه 22 تیر 1394, 03:00 صبح
نشد جواب شما اینطوریه!!!!!

یکصد و بیست و سه ,چهارصد و پنجاه و شش هزار

khokhan
دوشنبه 22 تیر 1394, 16:46 عصر
نشد جواب شما اینطوریه!!!!!

یکصد و بیست و سه ,چهارصد و پنجاه و شش هزار
باسلام
قبل از اینکه کار تبدیل رو شروع کنین یه متد قرار بدین تا num یا decimal بودن مقدار ورودی رو چک کنه و عملی متناسب با هر کدوم رو به اجرا بگذاره یه چیزی مثل این :


public string DecimalToWords(decimal d)
{
var formatted = d.ToString();

if(formatted.Contains("."))
{

string[] sides = formatted.Split(".");


return NumberToWords(Int32.Parse(sides[0])) + " and " + NumberToWords(Int32.Parse(sides[1]));
}
else
{

return NumberToWords(Convert.ToInt32(d));
}
}

علی فتحی
سه شنبه 23 تیر 1394, 00:28 صبح
بازم موفق نشدم . کد شما کلا اخطار میده اقا خوخان

khokhan
سه شنبه 23 تیر 1394, 01:23 صبح
بازم موفق نشدم . کد شما کلا اخطار میده اقا خوخان
علی آقای... !!! معلومه که جواب نمی ده ......:لبخند: قبلش بایستی با کدهای خودتون ست می کردین..... !!! مهم نیس این نمونه رو ببین..

majidgogdaragi
چهارشنبه 11 شهریور 1394, 22:55 عصر
سلام کلاس زیر تقریبا کامله:

rezajanfada
دوشنبه 30 فروردین 1395, 04:52 صبح
با سلام لطفا الگوریتم تبدیل عدد به حروف را پاسخ دهید

Louai_M
شنبه 25 اردیبهشت 1395, 00:41 صبح
دوست عزیز فقط کافی بود قبل از اینکه عدد دریافتی از تکست باکس را مستقیم به کلاس می فرستادی از کد زیر استفاده می کردی


lbltakhfifbeh4.Text = dd.num2str(Convert.ToDouble(txttakhfif4.Text).ToSt ring());

ghorbani77
دوشنبه 15 بهمن 1397, 09:47 صبح
خیلی خوب بود . ممنونم ازتون

piman_biabani
جمعه 05 آذر 1400, 18:21 عصر
با سلام دوستان کسی .dll عدد به حروف داره...
یا اینکه بتونه کمک کنه که چطور میتون کدهای تبدیل عدد به حروف به صورت یک کلاس داشت باشم که در تمام پروژه بشه ازش استفاده کرد:ناراحت:

رامین مرادی
سه شنبه 09 آذر 1400, 11:12 صبح
با سلام دوستان کسی .dll عدد به حروف داره...
یا اینکه بتونه کمک کنه که چطور میتون کدهای تبدیل عدد به حروف به صورت یک کلاس داشت باشم که در تمام پروژه بشه ازش استفاده کرد:ناراحت:


اینم یه کلاس


class AddToHarf
{
private static string[] yakan = new string[10] { "صفر", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه" };
private static string[] dahgan = new string[10] { "", "", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود" };
private static string[] dahyek = new string[10] { "ده", "یازده", "دوازده", "سیزده", "چهارده", "پانزده", "شانزده", "هفده", "هجده", "نوزده" };
private static string[] sadgan = new string[10] { "", "یکصد", "دویست", "سیصد", "چهارصد", "پانصد", "ششصد", "هفتصد", "هشتصد", "نهصد" };
private static string[] basex = new string[5] { "", "هزار", "میلیون", "میلیارد", "تریلیون" };
private static string getnum3(int num3)
{
string s = "";
int d3, d12;
d12 = num3 % 100;
d3 = num3 / 100;
if (d3 != 0)
s = sadgan[d3] + " و ";
if ((d12 >= 10) && (d12 <= 19))
{
s = s + dahyek[d12 - 10];
}
else
{
int d2 = d12 / 10;
if (d2 != 0)
s = s + dahgan[d2] + " و ";
int d1 = d12 % 10;
if (d1 != 0)
s = s + yakan[d1] + " و ";
s = s.Substring(0, s.Length - 3);
};
return s;
}
static string int2str(string snum)
{
string stotal = "";
if (snum == "") return "";
if (snum == "0")
{
return yakan[0];
}
else
{
/// <summary>
/// Rcode.ir
/// Ramin.mor47@gmail.com
/// </summary>
snum = snum.PadLeft(((snum.Length - 1) / 3 + 1) * 3, '0');
int L = snum.Length / 3 - 1;

for (int i = 0; i <= L; i++)
{
int b = int.Parse(snum.Substring(i * 3, 3));
if (b != 0)
stotal = stotal + getnum3(b) + " " + basex[L - i] + " و ";
}
stotal = stotal.Substring(0, stotal.Length - 3);
}
return stotal;
}

public static string GetStr(string number)
{
if (!number.Contains("."))
return int2str(number);
else
{
/// <summary>
/// Rcode.ir
/// Ramin.mor47@gmail.com
/// </summary>
string[] str = number.Split('.');
string result = int2str(str[0]);
string right = str[1].TrimEnd(new char[] { '0' });
if (right.Length > 0)
{
result += "ممیز ";
}
result += int2str(right);
switch (right.Length)
{
case 1:
result += " دهم ";
break;
case 2:
result += " صدم ";
break;
case 3:
result += " هزارم ";
break;
case 4:
result += " ده هزارم ";
break;
case 5:
result += " صد هزارم ";
break;
default:
break;
}
return result;
}
}
}



خب برای استفاده از اون هم به این صورت میتونید استفاده کنی:
textBox2.Text= AddToHarf.GetStr(textBox1.Text);در صورت داشتن هرگونه سوالی مطرح بفرمایید.