ورود

View Full Version : تبدیل (cast)متغییر ها



polestar
سه شنبه 07 اردیبهشت 1389, 15:35 عصر
با سلام
میخواستم یه متغییر از نوع Extended رو به رشته تبدیل کنیم بطوریکه اون عدد نرمال نشه(بصورت نمایی 123E+10 )نوشته نشه برای اینکار از FloatToStrF استفاده کردم:

procedure TForm1.Button1Click(Sender: TObject);
var
e:Extended;
S:String;
begin
e:=123456789012345678;
s:=FloattoStrF(e,ffGeneral,35,5);
label1.Caption:=s;
end;


ولی در کمال تعجب عدد بصورت 123456789012345680 نوشته میشه با اینکه من دقت رو 30 رقم تعیین کردن ولی این به رند کردن عدد ربط نداره چون اعداد دیگه ای هم تست کردم!اگه تعداد رقمو بازم بیشتر کنیم اونو بصورت نمایی مینویسه کسی میدونه مشکل کار از کجاست؟ راه دیگه ای برای اینکار وجود داره؟

vcldeveloper
سه شنبه 07 اردیبهشت 1389, 18:39 عصر
من متوجه نشدم که دقیقا میخواید چی کار کنید...اگر نمی خواید با نماد علمی نوشته بشه، پس چرا ffGeneral رو انتخاب کردید؟ در راهنمای مربوطه قید شده که ffGeneral کوتاهترین شکل نمایش عدد را بر اساس نماد علمی استفاده میکنه. Precision رو چرا 35 گرفتید؟ در حالی که راهنمای مربوطه میگه برای Extended باید Precision را حداکثر 18 تعیین کنید.

به نظر میاد شما راهنمای مربوط به FloatToStrF و TFloatFormat را به دقت مطالعه نکردید:
http://docwiki.embarcadero.com/VCL/e/index.php/SysUtils.TFloatFormat
http://docwiki.embarcadero.com/VCL/en/SysUtils.FloatToStrF

polestar
چهارشنبه 08 اردیبهشت 1389, 09:38 صبح
از لینکاتون ممنون ولی یعنی نمیشه اعداد بزرگتر از 18 رقم رو به رشته تبدیل کرد؟! اصلا نوع Extended مگه نباید از 3.4e-4932 تا 1.1e+4932 باشه؟!در صورتیکه من نتونستم عدد (e:=12345678901234567890) رو مقدار بدم. (یه مقدار منفی نشون میده!)
لطفا کمک کنید

vcldeveloper
چهارشنبه 08 اردیبهشت 1389, 13:29 عصر
ولی یعنی نمیشه اعداد بزرگتر از 18 رقم رو به رشته تبدیل کرد؟!
این محدودیت تابع FloatToStrF هست.


اصلا نوع Extended مگه نباید از 3.4e-4932 تا 1.1e+4932 باشه؟!در صورتیکه من نتونستم عدد (e:=12345678901234567890) رو مقدار بدم. (یه مقدار منفی نشون میده!)
نه؛ Extended میتونه حداکثر 19 رقم معنی دار داشته باشه، و توانی بین 4932- تا 4932+. عددی که شما نوشتید 20 رقم معنی دار داره.