PDA

View Full Version : مبتدی: نحوه حذف اعداد اعشاری



Smoke_1110
جمعه 02 اردیبهشت 1390, 18:15 عصر
سلام
دوستان من می خوام یه روشی در دلفی باشه که اعدا اعشاری رو به اعداد صحیح تبدیل کنه و یا چه جوری بتونم قسمت اعشاری یک عدد رو حذف کنم ؟ میخوام موقع نمایش یا گزارش گیری اعداد اعشاری نشون داده نشه

vcldeveloper
جمعه 02 اردیبهشت 1390, 18:43 عصر
Int
Trunc
Round
Floor
Ceil

اینا همگی توابع مختلف برای برگرداندن جزء صحیح یک عدد اعشاری یا گرد کردن اون عدد اعشاری هستند.

Smoke_1110
جمعه 02 اردیبهشت 1390, 19:10 عصر
آقای کشاورز چه جوری استفاده کنم از اینها؟

vcldeveloper
جمعه 02 اردیبهشت 1390, 19:33 عصر
چه جوری استفاده کنم از اینها؟
درباره هر کدومشون در Help دلفی توضیح داده شده. هر کدوم از اینا یک عدد اعشاری رو به عنوان ورودی دریافت می کنند، و یک عدد صحیح رو به عنوان خروجی ارائه می کنند.

Smoke_1110
جمعه 02 اردیبهشت 1390, 21:38 عصر
یک نمونه کد کوچیک مربوط به این حالت رو اگه برام بزاری ممنون میشم

loo30fer
جمعه 02 اردیبهشت 1390, 22:59 عصر
procedure TForm1.Button1Click(Sender: TObject);
var
a : Variant;
begin
a := 143323433.32;
a := INT(a);
ShowMessage(VarToStr(a));
end;

SAASTN
شنبه 03 اردیبهشت 1390, 00:39 صبح
من می خوام یه روشی در دلفی باشه که اعدا اعشاری رو به اعداد صحیح تبدیل کنه

میخوام موقع نمایش یا گزارش گیری اعداد اعشاری نشون داده نشه
از این گفته ها میشه چند برداشت کرد:
1- یه وقت هست که شما میای یه محاسبات اعشاری می کنی، اما می خوای نتیجه رو در واحد خاصی نمایش بدی؛ مثلا جرم یک جسم رو محاسبه می کنیم و می خوایم نمایش بدیم، واحد نمایش گرمه و مثلا 129.341 گرم معنی نداره، اما از طرفی حفظ این مقدار بطور دقیق برامون مهمه چون می خوایم ازش در محاسبات دیگه ای استفاده کنیم. اینجا مسئله تنها نمایشیه.
2- یه وقت دیگست که ما داریم محاسبات اعشاری انجام می دیم ولی نتیجه باید بطور صحیح باشه. مثلا فرض کنید می خوایم یه تصویر رو دوران بدیم ، خوب یه روش اینه که میایم مختصات هر پیکسل رو در ماتریس دوران ضرب می کنیم و مختصات نهایی پیکسل رو بدست میاریم، که یه مختصات اعشاریه. اینجا مقدار اعشاریه ما باید حتما به مقدار صحیح تبدیل بشه تا قابل استفاده باشه.
3- یه وقت دیگه هست که ما می خوایم از مقدار اعشار صرف نظر کنیم، راستش یه مثال ملموس و عمومی برای این مورد سراغ ندارم به نظرم چیز خیلی پرکاربردی هم نیست. حالا به هر دلیلی می خوایم یک بخشی از داده مون رو دور بریزیم، نه مسئله محدودیت نمایشیه نه تبدیل نوع هست.
برای هر کدوم از موارد فوق دلفی راههای متفاوتی رو برای ما قرار داده که به ترتیب براشون مثال میزنم:
const
MyFloat : Double = 7.352;
var
a: Integer;
begin
// 1: Display Format
ShowMessage(Format('%.0f', [MyFloat]));

// 2: Type Convert
a := Round(MyFloat);
ShowMessage(IntToStr(a));

// 3: Change Value
ShowMessage(Format('MyFloat = %.3f / Int(MyFloat) = %.3f', [MyFloat, Int(MyFloat)]));
end;

rezamahdizadeh
یک شنبه 04 اردیبهشت 1390, 16:49 عصر
می خواهیم حداقل اعداد اعشار (بدون صفرهای اضافی) را نمایش دهد و در صورتی که مقدار بخش اعشاری آن صفر باشد عدد صحیح آن را بدون نمایش ممیز نمایش دهد مثال
32.0214 و 48

SAASTN
یک شنبه 04 اردیبهشت 1390, 20:04 عصر
باید از تابع Format و کاراکتر g استفاده کنید:
const
MyFloat : Double = 7.352;
var
a: Integer;
begin
// 1: Display Format
ShowMessage(Format('%g', [MyFloat]));
end;

در این حالت عدد اعشاری در کوتاهترین وضعیت ممکن نمایش داده میشه، صفرهای بی معنی و ممیز در صورت نبودن اعشار حذف می شن. توجه کنید که در صورت خیلی بزرگ یا خیلی کوچیک بودن عدد بصورت علمی نمایش پیدا می کنه. اگر بخواید خودتون تعیین کنید مثلا اعداد با بیشتر از 5 رقم در سمت چپ ممیز بصورت علمی نمایش پیدا کنن باید بصورت زیر بنویسید:
ShowMessage(Format('%.5g', [MyFloat]));