ورود

View Full Version : سوال: روش گرد کردن اعداد به تعداد اعشار دلخواه



sarab.mb
جمعه 15 دی 1391, 16:49 عصر
دوستان برنامه تابع گرد کردن( round) !!! راهنمایی لطفا...

mahak006
جمعه 15 دی 1391, 17:06 عصر
دوستان برنامه تابع گرد کردن( round) !!! راهنمایی لطفا...
چه عددی رو می خوای گرد کن ، یعنی مثلا اعشاری رو می خوای گرد کنی به عدد صحیح تبدیل شه یا رقم اعضار رو می خوای گرد کنی ، یه رقم کم تر بشه ؟

sarab.mb
جمعه 15 دی 1391, 17:58 عصر
میخوام برنامه ای باشه که عدد اعشاری و تعداد ارقام برای گرد کردن را بدیم و خروجی عدد گرد شده باشه

مثلا عدد 12.4573 را بدیم و اگه تعداد ارقام واسه گرد کردن 2 بدیم خروجی بشه 12.46 و اگه 3 بخوایم خروجی بشه12.457 . (C++‎).....تا امشب فقط وقت دارم .اگه کسی میتونه راهنمایی لطفا!!!

lexical_error
جمعه 15 دی 1391, 18:57 عصر
ببینید تابع round که نداریم تو c++
ceil() and floor() هست
که به بالا و پایین گرد میکنند اعداد رو.مثلا ceil 12.4573 میشه 13 !

اما نوشتن برنامه ای که این کارو انجام بده ساده هست.میتونید عدد رو به صورت کاراکتر بگیرید و با یک شرط تست کنید که وقتی به کاراکتر . رسید از اون به بعد هرچندتا عدد که کاربر معرفی کرده جلو بره و آخری رو یه دونه اضافه کنه!

lexical_error
جمعه 15 دی 1391, 19:37 عصر
این برنامه کاری که گفتم رو انجام میده
#include "stdafx.h"
#include <iostream>
#include <iomanip>


using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{

int tpp;
int i;
int temp;
int counter=0;
char arr[100];

cout<<"Enter Number:"<<endl;
cin>>arr;
cout<<"Enter rNumber: "<<endl;
cin>>tpp;


for (i = 0;i<100;i++)
if (arr[i] == '.')
temp = i;


while(counter != tpp)
{
temp++;
counter++;
}


arr[temp]=char((int((arr[temp])-48)+1)+48);


for ( i = 0;i<=temp;i++)
cout<<arr[i];

cin.ignore();
cin.get();


return 0;
}

smemamian
شنبه 16 دی 1391, 12:13 عصر
ممنون میشوم یکی این خط رو توضیح بده :

arr[temp]=char((int((arr[temp])-48)+1)+48);

mahak006
شنبه 16 دی 1391, 17:19 عصر
ممنون میشوم یکی این خط رو توضیح بده :

arr[temp]=char((int((arr[temp])-48)+1)+48);


این خط در واقع داره کار همون گرد کردن رو انجام می ده ( رو به بالا گرد می کنه ) . اول مقدار کارکتری ذخیره شده تو آرایه arr تو خونه ی temp رو به عدد صحیح بر می گردونه ، بعدش اون عدد صحیح رو یکی بهش اضافه می کنه در نهایت دوباره مقدار عدد صحیح رو به کارکتر تبدیل می کنه و داخل همون خونه از آرایه می ریزه .
چون ما نمیتونیم عملیاتی مثل جمع و تفریق و ... رو رو مقادیر کارکتری داشته باشیم ، باید مقادیر رو به int تبدیل کنیم ، عملیات مورد نظر رو رو مقدار int انجام بدیم و جواب رو دوباره برگرونیم به کارکتر .

mehdi.mousavi
شنبه 16 دی 1391, 19:12 عصر
سلام.
خیلی راحت تر از اینها می تونید اینکارو انجام بدید... در حال حاضر چنین تابعی در C/C++ وجود داره و نیازی به بازنویسی اون نیست.
به کد زیر دقت کنید:

int toalNumberOfDesiredDecimalPoints = 3;

float f = 12.4573;
printf("%.*f", toalNumberOfDesiredDecimalPoints, f);


اینجا، کافیه تا تعداد رقم های مورد نیاز بعد اعشار رو در متغیر اولی ست کنیم تا printf بقیه کار رو انجام بده.
حتی با همون ceilf و floorf هم میشه اینکارو کرد...

موفق باشید.

jblaox
پنج شنبه 17 بهمن 1392, 15:44 عصر
سلام میدونم زیر خاکی اما گفتم یک جواب بدم کار ملت راه بیفته اگر کسی جستجو کرد :


#include <math.h>
float val = 37.777779;
float rounded_down = floorf(val * 100) / 100; /* Result: 37.77 */
float nearest = floorf(val * 100 + 0.5) / 100; /* Result: 37.78 */
float rounded_up = ceilf(val * 100) / 100; /* Result: 37.78 */



اگر میخواهی 3 رقم باشد به جای 100 بنویس 1000 و ...