اعداد اعشاری (Reals)

انواع اعشاری، دقت، نمایش علمی و فرمت‌بندی خروجی اعداد اعشاری.

اعداد اعشاری در پاسکال

وقتی به کسر نیاز دارید — قیمت، قد، میانگین، π — از انواع اعشاری استفاده کنید:

نوعحجمدقت (رقم معنادار)
single۴ بایت~۷ رقم
<strong>real</strong>۸ بایت~۱۵ رقم
double۸ بایت~۱۵ رقم
extended۱۰ بایت~۱۹ رقم
در Free Pascal مدرن، real و double هر دو ۸ بایت با دقت ۱۵ رقم‌اند — از real استفاده کنید.

تعریف و تخصیص

var
  price, discount, finalPrice: real;
begin
  price := 1250000.50;
  discount := 0.2;              { ۲۰ درصد }
  finalPrice := price - price * discount;
  writeln(finalPrice:0:2);      { 1000000.40 }
end;

نمایش علمی

var
  d: real;
begin
  d := 1.5e3;     { یعنی 1.5 × 10³ = 1500 }
  writeln(d:0:1); { 1500.0 }
  d := 2.5e-2;    { یعنی 0.025 }
  writeln(d:0:3); { 0.025 }
end;

فرمت‌بندی خروجی — :width:decimals

اعداد اعشاری بدون فرمت، زشت چاپ می‌شوند (مثل 3.1400000000E+00). راه‌حل:

var x: real;
begin
  x := 3.14159265;
  writeln(x:0:2);   { 3.14 }
  writeln(x:0:4);   { 3.1416 }
  writeln(x:8:2);   {     3.14 — حداقل عرض ۸ کاراکتر }
end;
فرمتمعنی
x:0:2۲ رقم اعشار، بدون فاصله اضافه
x:10:2۲ رقم اعشار در عرض حداقل ۱۰ (راست‌چین)
n:6برای اعداد صحیح: عرض حداقل ۶

تقسیم / همیشه اعشاری است!

در پاسکال عملگر / همیشه نتیجه real می‌دهد، حتی وقتی هر دو طرف integer باشند:
writeln(10 / 2);    { 5.0 — نه 5! }
writeln(10 / 4);    { 2.5 }
writeln(10 div 4);  { 2 — این تقسیم صحیح است }

خطای گرد کردن

var x: real;
begin
  x := 0.1 + 0.2;
  writeln(x:0:20);   { 0.30000000000000004441! }
end;
کامپیوترها اعداد اعشاری را تقریبی ذخیره می‌کنند — این خطای ذاتی اعشار ممیز شناور است. برای پول و محاسبات حساس، با integer (مثلاً ریال به‌جای تومان اعشاری) کار کنید.

خلاصه

این مبحث بخشی از دوره آموزش کامل پاسکال است.

ابزارهای مرتبط