PDA

View Full Version : مشکل با عمل تقسیم !



persia_hrn
دوشنبه 14 مرداد 1392, 03:13 صبح
سلام دوستان ،
من یه مشکل مسخره دارم که از بابتش خجلم :خجالت:
چطور میشه حاصل تقسیم 2 تا عدد رو فقط با سه رقم اعشار نشون داد ؟ :بامزه:

توضیح :
من یه متغیر Extended دارم که حاصل تقسیم دوتا از فیلدهای برنامم به اون Assign میشه ، X:=A/B
فقط میخوام X تا سه رقم اعشار مقدار بگیره .

برای مثال اگه X := 9 / 99999 اونوقت X برابر میشه با 9.000090000900009000090000900009e-5 که اگه دقت کنید قسمت صحیحش شده 9 و یک مقدار کم اعشار هم داره که باعث میشه جوابم از عددی که تقسیم شده بیشتر نمایش داده بشه که این کاملاً باعث اشتباه برنامه میشه !

البته یه جستجویی زدم و با FormatFloat آشنا شدم ولی از اونجایی که یه پای تابع FormatFloat باید String باشه درست نفهمیدم که میتونم اینجوری ازش استفاده کنم یا نه ؟

اگه بتونید راهنمایی کنید ممنون میشم .

persia_hrn
دوشنبه 14 مرداد 1392, 04:35 صبح
یکم تحقیق کردم اون چیزی که می خواستم رو بدست آوردم ولی یه چیز جالب هم برام پیش اومد

به این دستورا نگاه کنید :

Label1.Caption:=FloatToStr(StrToFloat(FormatFloat( '#0.000',(9/99999)))); تو این حالت جواب درسته .

Label1.Caption:=FloatToStr(StrToFloat(FormatFloat( '#0.0000',(9/99999)))); توی این حالت هم جواب درسته ، ولی

Label1.Caption:=FloatToStr(StrToFloat(FormatFloat( '#0.00000',(9/99999)))); توی این حالت Label1 به جای 0.0001 ، مقدار 9E-5 رو نشون میده !

علتش رو کسی میدونه ؟

hp1361
دوشنبه 14 مرداد 1392, 10:13 صبح
سلام

میتونی از کد زیر استفاده کنی که توی راهنمای دلفی هم هست


var
aNumber: real;
myString: string;
...
aNumber := 123456.789;
Str(aNumber: 16: 6, myString); // Predefined string length: 16. Decimal places: 6.
Writeln(myString); // The output is: ' 123456.789000'

یوسف زالی
دوشنبه 14 مرداد 1392, 10:55 صبح
سلام.


procedure TForm1.Button1Click(Sender: TObject);
var
A, B, C: Extended;
begin
A := 9;
B := 99999;
C := A / B;

ShowMessage(FloatToStr(C));
ShowMessage(Format('%0.10f', [C]));
end;

Ananas
دوشنبه 14 مرداد 1392, 16:28 عصر
Trunc(1000 * x) / 1000
مثال:

var
a, b, c : Extended;
begin
a := StrToFloatDef(Edit1.Text, 0);
b := StrToFloatDef(Edit2.Text, 1);
c := a / b;
Label1.Caption := FloatToStr(c);
Label2.Caption := FloatToStr(Trunc(1000 * c) / 1000);
end;