PDA

View Full Version : سوال: مقدار دهی اعشاری به یک متغییر از نوع عدد صحیح؟



MiniMicro
جمعه 25 اسفند 1391, 11:08 صبح
سلام خدمت دوستان من یک عدد اعشاری رو از ورودی میگیرم و اون را داخل یک متغیر از نوع صحیح میریزم...
اما سوال اینکه وقتی خروجی میگیرم فقط قسمت صحیح عدد ورودی رو برمی گردونه پس قسمت اعشاری چی میشه؟
ممنون میشم راهنمایی کنید....
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int x;
cin>>x;
cout<<"int x:"<<x;
_getch;
return 0;
}

smemamian
جمعه 25 اسفند 1391, 11:19 صبح
خب نوع آن عدد صحیح است !
int برای اعداد صحیح (غیراعشاری استفاده می شود.)

باتوجه به نیازتان از float یا double استفاده کنید.

#include <iostream>
using namespace std;

int main()
{

float x ;
cin >> x ;
cout << " x : " << x << endl ;

return 0;
}

MiniMicro
جمعه 25 اسفند 1391, 11:29 صبح
خب نوع آن عدد صحیح است !
int برای اعداد صحیح (غیراعشاری استفاده می شود.)

باتوجه به نیازتان از float یا double استفاده کنید.

#include <iostream>
using namespace std;

int main()
{

float x ;
cin >> x ;
cout << " x : " << x << endl ;

return 0;
}



بله دوست عزیز حق با شماست اما من میخوام بدونم کامپایلر با قسمت اعشاری عدد چکار میکنه؟آیا اون رو دور میریزه یا برای cin های بعدی یا محاسبات بعدی قسمت اعشاری رو حفظ میکنه؟

و یه سوال هم در مورد عمگر % دارم اونم اینکه چرا کامپایلر اجازه استفاده از اون رو برای اعداد اعشاری نمیده؟ در صورتی که ما براحتی میتونیم باقیمانده یک عدد اعشاری رو به عدد اعشاری دیگه بدست بیاریم.

smemamian
جمعه 25 اسفند 1391, 11:48 صبح
1- مقدار دور ریخته میشه.

2- بحث ریاضیات و برنامه نویسی کمی فرق داره! ٪ مقداری صحیح برمی گردونه و برای اینکه از ٪ برای 2 مقداری اعشاری استفاده کنی می تونی از تابع fmod استفاده کنید .

#include <iostream>
#include <cmath>
using namespace std;

int main()
{

float result ;
result = fmod(24.25,2.02);
cout << result << endl ;

return 0;
}

MiniMicro
جمعه 25 اسفند 1391, 12:18 عصر
دوست عزیز ممنون از کمکت میشه در مورد کتابخانه cmath توضیح بدی و اینکه چه فرقی با کتابخانه math داره؟
پیشاپیش ممنون ....

smemamian
جمعه 25 اسفند 1391, 12:35 عصر
وقتی namespace و template ها به زبان اضافه شدن این تغییرات رخ داد.

سعی کنید ا ز cmath استفاده کنید .

MiniMicro
جمعه 25 اسفند 1391, 12:47 عصر
دوست عزیز من از تابع fmod برای تقسیم اعشاری به اعشاریاستفاده کردم جواب درست بود ولی موقعی که صحیح رو به اعشاری و اعشاری رو به صحیح تقسیم کردم جواب اشتباه بود برای مثال:
صحیح به اعشاری:
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;

int main()
{

float result1,result2,result3 ;
result1 = fmod(24,0.2);
result2=24/0.2;
result3 =result2 * 0.2;
cout << "result1:"<<result1<<"\t"<<"result2:" <<result2<<"\t"<<"result3:"<<result3<< endl ;
getch();
return 0;

}

خروجی:
result1:0.2 result2:120 result3:24
اعشاری به صحیح:

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;

int main()
{

float result1,result2,result3 ;
result1 = fmod(12.24,6);
result2=12.24/6;
result3 =result2 * 6;
cout << "result1:"<<result1<<"\t"<<"result2:" <<result2<<"\t"<<"result3:"<<result3<< endl ;
getch();
return 0;

}

خروجی:

result1:0.24 result2:2.04 result3:12.24
پس اگر توجه کنید در مورد اول 24 رو منهای result3 کنیم جواب 0 خواهد شد که خروجی چیز دیگری هست و در مورد دوم هم همین طور...
پس 2 تا سوال پیش میاد:
1- آیا این تابع فقط برای دو عدد اعشاری هست؟
2- پس برای برای صحیح به اعشاری و اعشاری به صحیح چه باید کرد؟