PDA

View Full Version : مبتدی: نحوه حذف تعداد اعشار مورد نطر از اعداد اعشاری



hassan_kahrizy
سه شنبه 03 اسفند 1389, 17:44 عصر
بسمه تعالی
با سلام
من می خواهم یک عدد اعشاری که ممکنه هر تعداد اعشار داشته باشه رو فقط 2 رقم اعشارش رو بگیرم
البته من نمی خواهم اون عدد رو round کنم
مثلا می خواهم عدد 2.669466 بشه 2.66
البته دنبال تابع ریاضی برای اون هستم با رشته خودم می تونم درستش کنم
با تشکر

exlord
سه شنبه 03 اسفند 1389, 19:06 عصر
توابع ریاضی همشون Round میکنن ... باید دستی با string ببریش ....

hassan_kahrizy
چهارشنبه 04 اسفند 1389, 17:23 عصر
بسمه تعالی
با سلام

توابع ریاضی همشون Round میکنن ... باید دستی با string ببریش ....
مطمئن هستید هیچ راهی نداره؟
با تشکر

محسن شامحمدی
چهارشنبه 04 اسفند 1389, 18:31 عصر
مطمئن هستید هیچ راهی نداره؟نه بابا چی چی رو راه نداره.
این هم کد گرفتن 2 رقم اعشار

MessageBox.Show(string.Format("{0:n2}",3.14159 ));

exlord
چهارشنبه 04 اسفند 1389, 21:02 عصر
نه بابا چی چی رو راه نداره.
این هم کد گرفتن 2 رقم اعشار

MessageBox.Show(string.Format("{0:n2}",3.14159 ));


MessageBox.Show(string.Format("{0:n2}", 2.669466)); //==> Output : 2.67


البته من نمی خواهم اون عدد رو round کنم
مثلا می خواهم عدد 2.669466 بشه 2.66

از این روشا بله خیلی زیادن ... ولی همشون متد ToString رو صدا میزنن که اونم خروجیشو Round میکنه ...
تنها روش استفاده از string خالیه ...


decimal d = 12.66666m;

string tempStr = d.ToString();
if (tempStr.Split('.')[1] != null)
tempStr = tempStr.Split('.')[0] + "." + tempStr.Split('.')[1].Substring(0, 2);

hassan_kahrizy
پنج شنبه 05 اسفند 1389, 10:23 صبح
بسمه تعالی
با سلام
از دوستان متشکرم خیلی لطف کردید
ولی دنبال راهی با توابع ریاضی می گشتم فکر می کردم چنین چیزی تو توابع ریاضی دات نت طراحی شده باشه

rezakhafan4u
پنج شنبه 20 مرداد 1390, 23:28 عصر
نه بابا چی چی رو راه نداره.
این هم کد گرفتن 2 رقم اعشار

MessageBox.Show(string.Format("{0:n2}",3.14159 ));



این کد رو من تو سی شارپ زدم ولی یک error داد و اونم اینه که بجای عدد 3.14159 باید از یک رشته استفاده بشه

البته وقتی من رشته گذاشتم بازم جواب نداد

کسی نمیدونه چه تابعی یک عدد اعشار رو فقط تا دو رقم نشون میده ؟!؟!؟

gwbasic
جمعه 21 مرداد 1390, 00:25 صبح
دوستان کافی بود بجای این همه بحث یه نگاهی به کلاس Math می نداختین
برای اینکه فقط قسمت عددی رو جدا کنین می تونین از متد Math.Trancate استفاده کنین
چند تا متد مرتبط دیگه

j = (int)Math.Round(13.3); // j = 13
j = (int)Math.Round(13.8); // j = 14
j = (int)Math.Round(12.5); // j = 12 Nearest Even
j = (int)Math.Round(13.5); // j = 14 Nearest Even
d = Math.Round(13.834, 2); // d = 13.83
d = Math.Round(13.839, 2); // d = 13.84
d = Math.Round(13.335, 2, MidpointRounding.AwayFromZero); // d2 = 13.3
d = Math.Round(13.335, 2, MidpointRounding.ToEven); // d2 = 13.34
j = (int)Math.Truncate(13.2); // j = 13
j = (int)Math.Truncate(13.8); // j = 13
j = (int)Math.Ceiling(13.2); // j = 14
j = (int)Math.Floor(13.2); // j = 13

j = Math.DivRem(13, 3,out i); // j = 4 , i = 1 Reminder

rezakhafan4u
جمعه 21 مرداد 1390, 10:49 صبح
دوستان کافی بود بجای این همه بحث یه نگاهی به کلاس Math می نداختین
برای اینکه فقط قسمت عددی رو جدا کنین می تونین از متد Math.Trancate استفاده کنین




ممنون دوست عزیز ، ولی این توابعی که شما نوشتید جواب سوال نیست
چون تابه Round باعث روند شدن عدد ضمن جدا کردن دو رقم اعشار میشه
مثلاً عدد 20.158 تبدیل به 20.16 میشه ولی ما می خوایم تبدیل به 20.15 بشه
متوجه منظورم شدین ؟!؟!

gwbasic
جمعه 21 مرداد 1390, 13:55 عصر
گفتم که شما باید از TRancate استفاده کنید اگه دو رقم اعشار رو هم می خواین یه راه اینه که عددو در 100 ضرب کنید بعد TRancate کتید بعد بر 100 تقسیم کنید بقیه متدها ، متدهای مرتبط هستند که اشاره کردم

rezakhafan4u
جمعه 21 مرداد 1390, 14:07 عصر
گفتم که شما باید از TRancate استفاده کنید اگه دو رقم اعشار رو هم می خواین یه راه اینه که عددو در 100 ضرب کنید بعد TRancate کتید بعد بر 100 تقسیم کنید بقیه متدها ، متدهای مرتبط هستند که اشاره کردم


ممنون دوست عزیز
منم اتفاقاً همین کار رو مجبور شدم انجام بدم
خیلی لطف کردی
منظور من این بود که اون دوستمون که تاپیک رو زده، میخواسته یک تابعی بهش معرفی کنیم که این کارها رو خودش انجام بده و ما مجبور نباشیم با کد نویسی ضرب و تقسیم بر 100 کنیم

همگی موفق باشید

reza2371
جمعه 08 اسفند 1393, 06:10 صبح
سلام دوستان عزیز
روش یا تابعی هست که بدون هیچ روند کردنی ، اعشار را حذف کنه و عدد را به صورت صحیح به ما بده؟؟

Mamadex
یک شنبه 17 اسفند 1393, 16:31 عصر
راهکاری که در بالا، جهت "نگه داشتن فقط تعدادی از ارقام اعشاری یک عدد (http://barnamenevis.org/showthread.php?275869-%D9%86%D8%AD%D9%88%D9%87-%D8%AD%D8%B0%D9%81-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D9%86%D8%B7%D8%B1-%D8%A7%D8%B2-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1%DB%8C&p=1314949&viewfull=1#post1314949)" گفته شده را با استفاده از اکستشن متد (http://msdn.microsoft.com/en-us/library/bb383977.aspx) میتوانید بصورت زیر پیاده سازی کنید.


public static class HelperExtensions
{
public static double WithDecimalDigitsOf(this double d, int numberOfDigits=0)
{
var factor = Math.Pow(10, numberOfDigits);
d *= factor;
d = Math.Truncate(d);
d /= factor;
return d;
}
}

public void UseOfNumberWithTwoDecimalDigits()
{
long Bytes = 32209599L; //sample number such as file-size
int Mega = 1024 * 1024;
var MBSize = ((double)Bytes / Mega) + " MB. (Original number)";
var BadMBSize = ((double)Bytes / Mega).ToString("0.00") + " MB. (Bad: not good in all numbers)";
var BetterMBSize = ((double)Bytes / Mega).WithDecimalDigitsOf(2) + " MB. (Better)";
MessageBox.Show(MBSize + "\n\n" + BadMBSize + "\n" + BetterMBSize);
}

امیر مهرشاد
یک شنبه 17 اسفند 1393, 17:41 عصر
float myFloat = 1.30452F;


string part1 = myFloat.ToString("0.00");
string part2 = myFloat.ToString().Substring(4, 2);
string part3 = myFloat.ToString().Substring(6);


MessageBox.Show(part1);
MessageBox.Show(part2);
MessageBox.Show(part3);

امیر مهرشاد
یک شنبه 17 اسفند 1393, 17:45 عصر
یک کلک ساده به هر اندازه اعشار میخوایید انتخاب کنید بالا اشاره کردم اینجا توضیح مبدم مثلا رقم اعشار ما هست 1.30452

حالا میخوایم فقط 1.3 برگرده



float myFloat = 1.30452F;


string part1 = myFloat.ToString().Substring(0, 3);

MessageBox.Show(part1);

:لبخند:

modern_amin
پنج شنبه 29 بهمن 1394, 18:14 عصر
ببینید
نمیخایم تبدیل شه یا رند شه
چون باز جواب نمیده


میخایم ماهیت عددی براش بمونه



0.3 * 0.3 * 0.3 *0.3 = 1.2 باید بشه ولی میشه
ولی میشه 0.0081

اگر رند استفاده کنی میشه = 0

modern_amin
پنج شنبه 29 بهمن 1394, 18:29 عصر
decimal x = Math.Round(2.5555, 2); // x == 2.56

fool66
پنج شنبه 29 بهمن 1394, 19:10 عصر
سلام
امیدوارم این کارتون رو راه بندازه

Math.Truncate(2.669466*100)/100)

خروجی
2.66
موفق باشید

miillad
دوشنبه 03 اسفند 1394, 12:32 عصر
سلام
امیدوارم این کارتون رو راه بندازه

Math.Truncate(2.669466*100)/100)

خروجی
2.66
موفق باشید
اقا منم دقیقا همین مشکل رو دارم.دستور شما رو به شکل زیر نوشتم تو برنامه.منتها اعشار کلا حذف شد!
a= Math.Truncate(a*100)/100)
که a متغییری هست از نوع دابل

fool66
دوشنبه 03 اسفند 1394, 20:24 عصر
سلام
نه درست کار میکنه مگه جایی رو اشتباه وارد کنید اینم نمونه که تست کردم براتون ضمیمه کردم
موفق باشید

miillad
سه شنبه 04 اسفند 1394, 12:23 عصر
اقا دمت گرم جواب داد.البته من از این دستور زیر قبلا استفاده کرده بودم که جواب داده بود.دستور شما رو جایگزین اون کردم
a= Math.Round(a, 2);
textBox1.Text = a.ToString();