PDA

View Full Version : گرد کردن(روند کردن) اعداد float در c++



ye_tazekar
چهارشنبه 01 خرداد 1392, 14:21 عصر
سلام دوستان. آیا این امکان وجود داره که اعداد رو در c++ روند کرد؟ مثلا:
0.3199998 ----> 0.32
219999 -------> 220000

GENERAL IRAJ
چهارشنبه 01 خرداد 1392, 21:38 عصر
بله ، با استفاده از توابع کتابخانه ای ریاضی.
با استفاده از تابع ()ceil کوچترین عدد صحیح بزرگتر مساوی با یک عددرا که به عنوان آرگومان آن می باشد محاسبه می کند(گرد کردن به سمت پایین)
و با استفاده از تابع ()floor که عدد رو به عنوان آرگومان ورودی دریافت می کنه و به سمت بالا گرد می کنه.
در ضمن سر فایل توابع ریاضی رو هم باید در برنامه لحاظ کنی. <math.h>

developing
چهارشنبه 01 خرداد 1392, 22:31 عصر
با سلام

قبل از اینکه جوابت رو بدم این جمله ی معروف "قبل از ایجاد تاپیک جستجو کنید" رو به شما می گم. :گریه::عصبانی++: و بارها این سوالات در سالهای قبل جواب داده شده است. اما به خاطراینکه بی جواب نمونید... :قلب::لبخندساده:

اگه منظورت اینه که طول میدان را در خروجی تعیین کنیم به روش های زیر می تونی این کار رو بکنی:

برای تعیین طول کل میدان (اعم از صحیح و اعشاری):

cout.width(5);
cout << 0.3199998 << endl;


برای تعیین طول قسمت اعشار عدد:


cout.precision(2);
cout << 2234.3199998 << endl;

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

تذکر: گرد کردن فقط برای اعداد اعشاری و اون هم فقط قسمت اعشار جواب میده و برای گرد کردن اعداد صحیح باید خودتون کد بنویسید.

xxabasxx
یک شنبه 17 اردیبهشت 1396, 02:18 صبح
با عرض سلام خدمت اساتید محترم
در مورد گرد کردن اعشار میشه یک مثال بزنید و مثال رو دقیق توضیح بدید
من اصلا این رشته رو نخوندم و از این فرمولها سر در نمیارم
من برای نوشتن برنامه برای آی سی avr با زبان c++ احتیاج دارم که یک متغیر رو از نوع float با نام a در کدویژن معرفی کنم
این متغیر دقیقا ولتاژ ورودی به آی سی رو به مانشون میده که هم اعشار خیلی زیادی داره هم دائما در حال تغیره
حالا من میخوام بااستفاده از یک فرمول ریاضی یا تابع اعشارهای اضافی رو حذف کنم
برنامه من اینه
float a;
a=read_adc(0);
a=a*5/1023;
برای نمایش این عدد در ال سی دی از تابع sprintf استفاده کردم
ممنون و سپاسگذارم

Ananas
یک شنبه 17 اردیبهشت 1396, 15:05 عصر
سلام.
با کمک تابع floor و ceil که در math.h هست این تابع رو مینویسیم:

float RoundFlt(const float x, const int ex)
{
static const float pow_10_ex[] =
{
1.0f,
10.0f,
100.0f,
1000.0f,
10000.0f,
100000.0f,
1000000.0f
};
static const float inv_pow_10_ex[] =
{
1.0f,
0.1f,
0.01f,
0.001f,
0.0001f,
0.00001f,
0.000001f
};
int index = (ex > 6) ? 6 : ex;
float l_x = x * pow_10_ex[index];
return ((l_x < 0.0f) ? ceil(l_x - 0.5) : floor(l_x + 0.5f)) * inv_pow_10_ex[index];
};


مقدار ex ورودی تابع برای تعداد رقم های اعشار هست. متلا برای چهار رقم:

RoundFlt(a, 4);

البته این تابع برای مقادیری هست که توان ده بزرگ یا کوچیک نداشته باشن. مثلا عدد 1.9999e30 رو که در واقع 1999900000000000000000000000000 هست به 2.0e30 رند نمیکنه!