# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال >  تعیین تعداد ارقام اعداد اعشاری

## mohmp3

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

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

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

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

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

با تشکر

----------


## دلفــي

خودتون يه تابع تعريف كنيد كه ديگه مجبور نباشيد هر دفعه عمل تبديل رو تكرار كنيد :


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

مثال :


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


جواب : 4356.63 = R

----------


## mohmp3

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

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


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


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

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

----------


## دلفــي

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

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

----------


## سعید صابری

> ممنون از پاسخ شما
> 
> ملاحظه می کنید، عدد تو editbox با سه رقم اعشاره و بعد از insert با ده رقم نمایش داده می شه !
> 
> 
> و بعد از اعمال تابع Formatreal که در پست قبل نوشته شد (با در نظر گرفتن 0.00)، دو رقم اول گرد می شه، اما همچنان تا 10 رقم نشان داده می شود!!!
> 
> 
> نوع فیلدهای midrex_left و MAXL در اینجا، هر دو real است.
> ...



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

----------


## mohmp3

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


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

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

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

----------


## دلفــي

> ممنون از پاسخ شما
> 
> خیلی از فیلدها در زمان اجرا ساخته می شوند. خاصیت Displayformat رو در زمان اجرا برای یک فیلد چگونه می توانم تنظیم کنم. من از SQLConnection استفاده می کنم.
> 
> احتمالا مشکل من با تنظیم Displayformat حل می شود. چون من با اعداد کوچیکی کار می کنم، لذا تا هر رقم اعشار تو محاسبات لحاظ بشه، اهمیتی نداره، اما برای نمایش اعداد محدودیت عرض فیلد رو دارم.


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

----------


## mohmp3

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


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

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

----------


## mohmp3

احتمالا باید از کد زیر استفاه کنم (برای فیلد Real):

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

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

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

----------

