PDA

View Full Version : سوال: تبدیل اعشاری به صحیح



mgh_1501040
سه شنبه 08 شهریور 1390, 15:20 عصر
سلام دوستان
من یه برنامه نوشتم که باید قسمت اعشاری یه عدد double رو از قسمت صحیح جدا کنم و قسمت اعشاری رو به صحیح تبدیل کنم برای همینم عدد doubleرو برابر یه عدد intمیذارم تا قسمت صحیحش جدا بشه و بعد از عدد اعشاری کم میکنم و توی یه doubleمیریز م که قسمت اعشاری رو هم جدا داشته باشم
وقتی میخوام اعشارشو تبدیل به صحیح کنم اینکار و میکنم:
قسمت اعشاری رو توی لوپ در 10 ضرب میکنم و دوباره قسمت صحیحش رو جدا میکنم تو یه int می ریزم
شرط لوپ هم اینه که این دوتا با هم برابر نشه وقتی قسمت صحیحش با خودش برابر بشه یعنی قسمت اعشاری کاملا صحیح شده پس باید خارج شه
ولی مساله اینه که عدد اعشاری و صحیح من با هم برابر می شن اما از لوپ خارج نمیشه و وقتی اختلافشون رو حساب میکنم اختلاف ناچیز دارن...چرا؟
اینم کدش :
#include








<iostream>

#include








<conio.h>

using








namespace std;

int








main(){




عدد اعشاری که از ورودی میخونم


double dbl;


قسمت صحیح dbl


int integer;


قسمت اعشار dbl


double dbl2;


قسمت صحیح dbl2وقتی داره به صحیح تبدیل میشه


int integer2;


تفاضل dbl2,integer2


double c;

 

cin>>dbl;



integer=dbl;

cout<<integer<<endl;

dbl2=dbl - integer;

cout<<dbl2<<endl;

c=dbl2;

cout<<c<<endl;





while(c!=0)

{



dbl2*=10;

cout<<



"dbl2 "<<dbl2<<endl;

integer2=dbl2;

cout<<



"int2 "<<integer2<<endl;

c=dbl2-integer2;

cout<<



"c: "<<c<<endl;





}

 

getch();





return 0;

}

Arcsinos
سه شنبه 08 شهریور 1390, 23:07 عصر
سلام
میتونی این کارو کنی تا زمانی که قسمت اعشاری صفر نشده تو 10 ضربش کنی و قسمت صیحش رو نگه داری وقسمت اعشاریشو اگه صفر نشده دوباره تو 10 ضرب کنی اینطوری یه عدد صحیح به دست میاری . مثلا عدد 0.123 تو 10 ضرب میشه میشه 1.23 خب یک رو میریزی تو مثلا x اگه 0.23 صفر نبود که نیست xرو هم ضرب در 10 میکنی دوباره 0.23 تو ده ضرب میشه و قسمت صحیحش با x که 10 هست جم میشه حالا x میشه 12 و قسمت اعشاری با صفر مقایسه میشه که اینجا 0.3 هست که برابر صفر نیست پس x تو 10 ضرب میشه . دوباره 0.3 تو 10 ضرب میشه و میشه 3.0 و با x که برابر 120 هست جم میشه که میشه 123 و قسمت اعشاری هم میشه 0.0 پس یعنی کار تمومه و عددمون هم 123 هست . موفق باشی

mgh_1501040
شنبه 12 شهریور 1390, 15:38 عصر
سلام خیلی ممنون از اینکه راهنماییم کردین اما مشکلم حل نشد مث که تو typecastمشکل داره کامپایلر سی .....من برا اینکه قسمت اعشاری و صحیح رو جدا کنم از تایپ کست اعشاری به صحیح استفاده میکنم اما مثلا
اگه عددم 12.34 باشه 0.34 رو که جدا میکنه .سری اول که0.34 رو در 10 ضربش میکنم قسمت صحیح میشه 3 که درسته.... اما سری دوم که عدد میشه 34 قسمت صحیحش رو که با تایپکست بدست اوردم میشه 33!!!!!!!!!!!!
از تابع floor هم استفاده کردم همین جواب رو داد راه دیگه ای سراغ ندارین؟...............
ممنون

Arcsinos
شنبه 12 شهریور 1390, 19:06 عصر
راه دیگش اینه که عددتو به صورت آرایه بگیری و بیای تا وقتی که به '.' نرسیدی رو تو قسمت صحیح قرار بدی و بعد از اون رو تو قسمت اعشاری . فکر کنم این راه ساده تره .
موفق باشی