PDA

View Full Version : تعیین تعداد ارقام اعداد اعشاری



mohmp3
شنبه 10 بهمن 1388, 10:46 صبح
سلام، چنانچه سوال تکراری است، به بزرگی خودتون ببخشید.

برای رند کردن (با تعداد ارقام مشخص بعد از اعشار) از توابع Formatfloat و Roundto و simpleroundto استفاده شد. این توابع فقط روی فیلد varchar جدول درست عمل می کنند. روی فیلد real یا float جدول تبدیل انجام نمی شود.

من در حال حاضر تمام فیلدهای محاسباتی رو به خاطر رند شدن varchar تعریف کردم. اما به علت تعدد مراحل محاسبات، مجبورم پیاپی real رو به String و بالعکس تبدیل کنم. در مرحله آخر محاسبه هم با اضافه کردن فیلد جدید، پیغام is not valid float point رو می گیرم که نتونستم کاری براش بکنم.

تابع رند دیگر می شناسید که روی فیلد real کار کند ؟

شاید گفتنش خیلی مهم نباشه، ولی من از اینتربیس استفاده می کنم.

با تشکر

دلفــي
شنبه 10 بهمن 1388, 11:04 صبح
خودتون يه تابع تعريف كنيد كه ديگه مجبور نباشيد هر دفعه عمل تبديل رو تكرار كنيد :




Function FormatReal( Num : Real): Real;
begin
Result := StrToFloat(FormatFloat('0.00' , Num));
end;



مثال :



var R: Real;
R := FormatReal(4356.63224);


جواب : 4356.63 = R

mohmp3
شنبه 10 بهمن 1388, 11:29 صبح
ممنون از پاسخ شما

ملاحظه می کنید، عدد تو editbox با سه رقم اعشاره و بعد از insert با ده رقم نمایش داده می شه !


http://img98.com/images/ol30s555d9retxtzctc.jpg

و بعد از اعمال تابع Formatreal که در پست قبل نوشته شد (با در نظر گرفتن 0.00)، دو رقم اول گرد می شه، اما همچنان تا 10 رقم نشان داده می شود!!!


http://img98.com/images/xte9h7iozejdz96e7xwp.jpg

نوع فیلدهای midrex_left و MAXL در اینجا، هر دو real است.

پی نوشت: Editbox بالا، در زمان اجرا Create می شود.

دلفــي
شنبه 10 بهمن 1388, 12:07 عصر
شما مي توني در تنظيمات مربوط به فيلدي كه مقدار اعشار رو در اون دخيره مي كني بسته به نيازت مقدار Decimal Places رو تغيير بدي ، مثلا براي ذخيره اعداد با دو رقم اعشار مقدار 2 را به آن اختصاص بده ، البته اين كار رو بايد در پايگاه داده اي كه ازش استفاده كردي انجام بدي ( مثلا در اكسس )

براي نمايش n رقم اعشار در DBGrid در خود دلفي هم مي توني روي ADOQuery يا AdoTable (از هر كدوم كه استفاده كردي) دو با كليك كن ، در صفحه باز شده راست كليك كرده و گزينه Add All Fields رو انتخاب كن ، زماني كه فيلدهاي جدولت به ليست اضافه شدن ، روي فيلد مورد نطرت كليك كرده و در قسمت Properties اون در قسمت DisplayFormat فرمت مورد نظرت رو وارد كن مثلا 0.00

سعید صابری
شنبه 10 بهمن 1388, 12:10 عصر
ممنون از پاسخ شما

ملاحظه می کنید، عدد تو editbox با سه رقم اعشاره و بعد از insert با ده رقم نمایش داده می شه !


http://img98.com/images/ol30s555d9retxtzctc.jpg

و بعد از اعمال تابع Formatreal که در پست قبل نوشته شد (با در نظر گرفتن 0.00)، دو رقم اول گرد می شه، اما همچنان تا 10 رقم نشان داده می شود!!!


http://img98.com/images/xte9h7iozejdz96e7xwp.jpg

نوع فیلدهای midrex_left و MAXL در اینجا، هر دو real است.

پی نوشت: Editbox بالا، در زمان اجرا Create می شود.


در قسمت properties فيلدت گزينه displayformat ميتوني عدد فرمت بندي كني .

mohmp3
شنبه 10 بهمن 1388, 12:48 عصر
شما می تونی در تنظیمات مربوط به فیلدی که مقدار اعشار رو در اون دخیره می کنی بسته به نیازت مقدار Decimal Places رو تغییر بدی ، مثلا برای ذخیره اعداد با دو رقم اعشار مقدار 2 را به آن اختصاص بده ، البته این کار رو باید در پایگاه داده ای که ازش استفاده کردی انجام بدی ( مثلا در اکسس )

برای نمایش n رقم اعشار در DBGrid در خود دلفی هم می تونی روی ADOQuery یا AdoTable (از هر کدوم که استفاده کردی) دو با کلیک کن ، در صفحه باز شده راست کلیک کرده و گزینه Add All Fields رو انتخاب کن ، زمانی که فیلدهای جدولت به لیست اضافه شدن ، روی فیلد مورد نطرت کلیک کرده و در قسمت Properties اون در قسمت DisplayFormat فرمت مورد نظرت رو وارد کن مثلا 0.00

ممنون از پاسخ شما

خیلی از فیلدها در زمان اجرا ساخته می شوند. خاصیت Displayformat رو در زمان اجرا برای یک فیلد چگونه می توانم تنظیم کنم. من از SQLConnection استفاده می کنم.

احتمالا مشکل من با تنظیم Displayformat حل می شود. چون من با اعداد کوچیکی کار می کنم، لذا تا هر رقم اعشار تو محاسبات لحاظ بشه، اهمیتی نداره، اما برای نمایش اعداد محدودیت عرض فیلد رو دارم.

دلفــي
شنبه 10 بهمن 1388, 12:55 عصر
ممنون از پاسخ شما

خیلی از فیلدها در زمان اجرا ساخته می شوند. خاصیت Displayformat رو در زمان اجرا برای یک فیلد چگونه می توانم تنظیم کنم. من از SQLConnection استفاده می کنم.

احتمالا مشکل من با تنظیم Displayformat حل می شود. چون من با اعداد کوچیکی کار می کنم، لذا تا هر رقم اعشار تو محاسبات لحاظ بشه، اهمیتی نداره، اما برای نمایش اعداد محدودیت عرض فیلد رو دارم.

نیازی نیست که در زمان جرا این خاصیت رو مقداردهی کنید !
شما می تونید در حالت Design طبق توضیحی که در بالا گفتم تمام اون موارد رو انجام بدی و پس از گزینه Add All Fields ، گزینه New Field رو انتخاب کرده و نام و نوع فیلدی رو که در حالت اجرا می سازی را وارد کرده و نوع اون رو هم از نوع Data انتخاب کرده و خاصیت DisplayFormat رو مقداردهی کنی .

mohmp3
شنبه 10 بهمن 1388, 12:58 عصر
نیازی نیست که در زمان جرا این خاصیت رو مقداردهی کنید !
شما می تونید در حالیت Design طبق توضیحی که در بالا گفتم تمام اون موارد رو انجام بدی و پس از گزینه Add All Fields ، گزینه New Field رو انتخاب کرده و نام و نوع فیلدی رو که در حالت اجرا می سازی را وارد کرده و نوع اون رو هم از نوع Data انتخاب کرده و خاصیت DisplayFormat رو مقداردهی کنی .

ببخشید، من منظورم رو بد گفتم !

منظورم این بود که فیلد توسط کاربر ساخته می شود !

mohmp3
شنبه 10 بهمن 1388, 14:25 عصر
احتمالا باید از کد زیر استفاه کنم (برای فیلد Real):



(TSQLConnection.Fields.FieldByNumber(1) as TFloatField).DisplayFormat:='0.00';

من دو جا از این کد استفاده کردم، یکی زمان ساختن فیلد توسط کاربر، دیگری زمان Insert داده به همان فیلد توسط کاربر. هر دو جا Error داشت.

ممنون می شم بفرمایید کجا باید از این کد استفاده کنم ؟