تکه کد پایتونی که میبینید داره سه بار عدد 0.1 رو با خودش جمع میکنه که برای ما آدما قطعا جوابش 0.3 هست.
اما وقتی از عملگر مقایسه == استفاده میکنیم که مقدار جمع این اعداد رو با 0.3 مقایسه کنیم بهمون خروجی False رو میده که یعنی دو طرف این مقایسه برابر نیستن !
شاید براتون عجیب باشه که چرا خروجی کدی که میبینید False شده !!!
بعضیا ممکنه بگن این یه باگه توی پایتون !
در صورتی که اینطور نیست !!!
در واقع علت این ماجرا برمیگرده به نحوه ی ذخیره سازی اعداد اعشاری توی کامپیوتر.
کلا اعداد توی کامپیوتر بر مبنای دو ذخیره میشن (binary) ولی انسان ها به صورت دهدهی اعداد رو استفاده میکنن. پس وقتی عدد 0.3 رو توی کد نوشتیم، کامپیوتر میاد اون رو به عدد مبنای دو تبدیل میکنه که میشه همچین چیزی:
...0.00011001100110011001
یعنی اعداد بعد اعشار، تا بینهایت ادامه دارن، ولی کامپیوتر میتونه تا یه حدی اعداد رو ذخیره کنه واسه همین، همیشه عدد دهدهی با یه تقریب (Approximation) توی سیستم تبدیل به عدد دودویی میشه، و اگه این دو عدد دهدهی و دودویی رو مقایسه کنید با هم، هیچ وقت برابر نمیشن.
برای همینه وقتی داریم مثه کدی که توی عکس میبینید اعداد اعشاری رو جمع میزنیم و با مقدار واقعی جمعشون مقایسه میکنیم خروجی False رو میبینیم.
این اتفاق برای هر عملیات ریاضی که روی اعداد اعشاری انجام بدیم میفته. فرقی نداره چه زبان برنامه نویسی باشه توی همشون این مشکل وجود داره.