اعداد اعشاری یا float در پایتون یکی از پرکاربردترین انواع دادهها هستند. برخلاف تصور رایج که این اعداد صرفاً برای محاسبات ساده ریاضی استفاده میشوند، کلاس float دارای متدهای داخلی قدرتمندی است که برای تبدیل دادهها، بررسی ساختار و محاسبات دقیق علمی کاربرد دارند.
در این مقاله، تمامی متدهای متصل به آبجکت float را از سطح مقدماتی تا پیشرفته بررسی میکنیم.
سطح مقدماتی (Beginner Level)
در سطح مقدماتی، با نحوه ساخت اعداد اعشاری و کاربردیترین متد برای بررسی ماهیت اعداد آشنا میشویم.
۱. ساخت و ماهیت Float
در پایتون، هر عددی که دارای ممیز باشد، به عنوان float شناخته میشود. این اعداد بر اساس استاندارد IEEE 754 پیادهسازی شدهاند (دقت مضاعف یا double precision).
مثال ۱: روشهای مختلف تعریف
۲. متد is_integer()
یکی از کاربردیترین متدهای کلاس float، متد is_integer() است. این متد بررسی میکند که آیا مقدار ذخیره شده در متغیر اعشاری، در واقعیت یک عدد صحیح است یا خیر (یعنی قسمت اعشاری آن صفر است).
این متد زمانی مفید است که میخواهید مطمئن شوید ورودی کاربر یا نتیجه محاسبات، بدون گرد کردن دادهها، یک عدد کامل است.
مثال ۲: بررسی اعداد صحیح در قالب اعشار
مثال ۳: کاربرد در اعتبارسنجی
# Static Snippet: Function logic utilizing is_integer
def process_data(value):
# اگر عدد صحیح بود (مثلاً 12.0) آن را به int تبدیل کن
if isinstance(value, float) and value.is_integer():
return int(value)
return value
سطح پیشرفته (Professional Level)
در سطح حرفهای، به سراغ نحوه ذخیرهسازی بیتهای اعداد اعشاری در حافظه، تبدیلهای سطح پایین (Low-level) و چالشهای دقت محاسباتی میرویم.
۱. متد as_integer_ratio()
این متد یک زوج مرتب (tuple) شامل دو عدد صحیح را برمیگرداند که حاصل تقسیم آنها دقیقاً برابر با عدد اعشاری مورد نظر است. این متد برای درک نحوه ذخیرهسازی عدد در حافظه بسیار مهم است، زیرا کامپیوترها اعداد اعشاری را به صورت کسری (Fraction) ذخیره میکنند.
فرمول کلی: float = numerator / denominator
مثال ۱: استخراج کسر مولد عدد
مثال ۲: بازسازی عدد از نسبت
۲. متدهای Hexadecimal (hex و fromhex)
برای انتقال دقیق اعداد اعشاری بین سیستمهای مختلف یا زبانهای برنامهنویسی بدون از دست دادن دقت (Precision Loss)، استفاده از نمایش مبنای ۱۶ (Hexadecimal) بهترین روش است.
float.hex(): عدد را به یک رشته هگزادسیمال تبدیل میکند.float.fromhex(): رشته هگزادسیمال را دقیقاً به همان عدد float تبدیل میکند.
مثال ۳: تبدیل به Hex و برعکس
۳. چالش دقت در اعداد اعشاری (Floating Point Arithmetic)
یک نکته بسیار حرفهای که هر برنامهنویس پایتون باید بداند، این است که اعداد float همیشه دقیق نیستند. به دلیل محدودیتهای باینری، اعدادی مثل 0.1 نمایش باینری دقیقی ندارند.
مثال ۴: خطای معروف ۰.۱ + ۰.۲
راه حل حرفهای: مقایسه با تلورانس (Tolerance)
برای حل این مشکل هرگز نباید از == برای مقایسه float استفاده کنید.
۴. نمودار ذخیرهسازی (تصویری)
درک اینکه float چگونه از sign, exponent و mantissa تشکیل شده است به دیباگ کردن کمک میکند.

# Static: Concept of internal storage
# Float is stored as: (-1)**sign * (1 + mantissa) * 2**(exponent - bias)
# This explains why methods like as_integer_ratio() exist.
pass