PDA

View Full Version : سوال: حذف اعشار از عدد



mohammad5530
چهارشنبه 15 آبان 1392, 16:49 عصر
سلام

توی برنامه ی من بعضی وقت ها اعداد به صورت اعشار در می آیند و من میخام جوری کدم رو بنویسم که اگر عدد به صورت اعشار بود ، اعشار حذف بشه و اگر که عدد صحیح بود بقیه دستورات رو اجرا کنه

لطفا منو راهنمایی کنید

ممنون

mohsen_popo
چهارشنبه 15 آبان 1392, 16:52 عصر
لازم به چک کردن نیست هر جا که لازم داری عدد به int تبدیل بشه .... یه دستور convert بنویس لازم به چک کردن نیست... اگر عدد int بود که int میمونه اگر اعشاری بود int میشه...

موفق باشی...

mohammad5530
چهارشنبه 15 آبان 1392, 16:58 عصر
مشکل من اینه که باید عدد رو به صورت حروف توی یک فیلد دیگه نشون بدم و در صورتی که اعشاری باشه ، عدد رو نمیتونه به صورت حروف نشون بده

mohsen_popo
چهارشنبه 15 آبان 1392, 17:02 عصر
اگر حروف میفرستی بهتره عدد مربوطه باهاش بفرسی که عدد تبدیل کنی بعد دوباره عدد تبدیل شده رو به حروف تبدیل کنی...

یا اینکه بیا خود حروف رو به عدد تبدیل کنی بعد عدد رو به int و بعد دوباره به حروف برگردونی....

roolinjax
چهارشنبه 15 آبان 1392, 17:17 عصر
سلام
منظورتون از حروف اینه ؟ 25 --> بیست و پنج ؟ یا "25" ؟
البته در هر دو حالت ربطی نداره که عدد اعشاری باشه ، قبل نمایش بصورتی که می خواید اون رو به int تبدیل کنید

مگر اینکه قصدتون چیز دیگه ای باشه که لازمه بهتر توضیح بدین

danialafshari
چهارشنبه 15 آبان 1392, 17:24 عصر
سلام
منظورتون رو متوجه نمیشم
اگر می خواید از اعشار صرف نظر کنید می تونید اون رو به int تبدیل کنید
double f = 3.25;
int newF = Convert.ToInt32(f);
MessageBox.Show(newF.ToString());

mohammad5530
چهارشنبه 15 آبان 1392, 17:34 عصر
این کد من

cls_NumToStr nts = new cls_NumToStr();
txtKolHoroof.Text = nts.num2str(txtMablagheKol.Text.Trim());

من موقعی که عدد رو به صورت اعشاری وارد میکنم ارور میده و میگه که فرمتش درست نیست .

cls_NumToStr کلاسم هست که عدد رو به حروف می نویسه . زمانی که عدد اعشاری هست ارور میده . در غیر این صورت کار خیلی خوب پیش میره

danialafshari
چهارشنبه 15 آبان 1392, 17:39 عصر
سلام
خب شما دارید داده String میدید باید به int تبدیلش کنید
این کارتو ببین راه میندازه
cls_NumToStr nts = new cls_NumToStr();
txtKolHoroof.Text = nts.num2str(int.Parse(txtMablagheKol.Text));
می تونی از ref و out هم برای خروجی گرفتن از متدت استفاده کنی
موفق باشی

mohammad5530
چهارشنبه 15 آبان 1392, 17:46 عصر
روی این خط ارور میده :
txtKolHoroof.Text = nts.num2str(int.Parse(txtMablagheKol.Text.Trim()). ToString());

غیر تبدیل این شکلی راهی نیست که اعشار حذف بشه ؟؟

danialafshari
چهارشنبه 15 آبان 1392, 17:57 عصر
تابع درون کلاس رو قرار بده یا cls_NumToStr.cs رو ضمیمه کن

mohammad5530
چهارشنبه 15 آبان 1392, 18:04 عصر
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 - 2);
}
return stotal;

mohammad5530
چهارشنبه 15 آبان 1392, 18:05 عصر
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 - 2);
}
return stotal;

danialafshari
چهارشنبه 15 آبان 1392, 18:14 عصر
این که پارامترش string هست
بفرمائید:

mohammad5530
چهارشنبه 15 آبان 1392, 22:50 عصر
این که پارامترش string هست
بفرمائید:

ممنون ولی باز هم این مشکل وجود داره . من میخام اعشار عددم از بین بره که بتونم راحت به صورت حروف نمایشش بدم . مثلا اگر 2425.23 بود بشه 2425 . یعنی 23 از بین بره

لطفا راهنمایی کنید . مرسی

amin32
پنج شنبه 16 آبان 1392, 00:39 صبح
این کد رو امتحان کنید:

txtKolHoroof.Text = nts.num2str(Convert.ToString(Convert.ToInt32(Conve rt.ToSingle(txtMablagheKol.Text))));


البته این کد عدد اعشاری رو رند میکنه.

danialafshari
پنج شنبه 16 آبان 1392, 10:04 صبح
این کد رو امتحان کنید:

txtKolHoroof.Text = nts.num2str(Convert.ToString(Convert.ToInt32(Conve rt.ToSingle(txtMablagheKol.Text))));


البته این کد عدد اعشاری رو رند میکنه.

سلام
کد ایشون هم کاملا درسته
برای درک بهتر:
شما ابتدا میای string رو تبدیل به double میکنی بعد میای با استفاده از کلاس math و تابع Round اونو گرد میکنی
حالا طبق نمونه من به این شکل میشه:
Class1 c = new Class1();
double d=Convert.ToDouble(textBox1.Text.Trim());
lblHoruf.Text = Convert.ToString(Math.Round(d));
و یا :
Class1 c = new Class1();
lblHoruf.Text = Convert.ToString((int)Convert.ToDouble(textBox1.Te xt.Trim()));
موفق باشید