PDA

View Full Version : مبتدی: مشکل در type casting



cloner11
پنج شنبه 24 بهمن 1392, 10:11 صبح
سلام
توی کد زیر من متغیر aرو از نوع float تعریف کردم ,1/3 هم که اعشاریه و وقتی ضرب 3 میشه حاصل باید اعشاری بشه یعنی : 1.0000 ولی وقتی اجرا میکنم 0.0000 میده!



#include <stdio.h>
#include <conio.h>
main()
{
float a;
a=(1/3)*3;
printf("%f",a);
getch();


}

Sasy_1
پنج شنبه 24 بهمن 1392, 12:56 عصر
سلام
فکر کنم کلا عملیات مشکل داره و در ضمن سعی کن برای جلوگیری از این اتفاقات به متغییرها حتما مقدار اویله بدی .
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
float a;
a=1;
a=a/3;
cout<<a*3<<endl;
getch();
return 0;
}

rahnema1
پنج شنبه 24 بهمن 1392, 13:37 عصر
سلام؛ در عبارت (3/1)توی پرانتز شما دارید دو تا integer را بر هم تقسیم می کنید در نتیجه جواب اون integer میشه و وقتی یک عدد اعشاری بخواد integer بشه به عدد صحیح قبل از خود تبدیل میشه که جواب صفر خواهد بود و وقتی ضرب در 3 میشه باز هم صفر میشه. حالا اگه یکی از اعداد داخل پرانتز را از نوع اعشاری بذارید مثلا (3.0/1) نتیجه داخل پرانتز اعشاری میشه و وقتی ضرب در 3 شد جواب درست میده

fahimeh1512
پنج شنبه 24 بهمن 1392, 22:27 عصر
مشکل اصلیش اینه که 1/3=0.3333333
این عدد دوره گردش داره و چون اعداد کسر هر دو اینتیجر هستن پس حاصل هم تبدیل به اینتیجر میشه که مقدار صحیحش همون صفره بعدشم که در سه ضرب میشه نتیجه همون صفر میشه:چشمک: