نیک اشاره میکند که فرمول "=0.28*100-INT(0.28*100)=0" False را برمیگرداند حتی اگر آشکارا درست باشد. او معتقد است که این مسئله به گرد کردن و نحوه استفاده کامپیوتر از محاسبات باینری و غیره مربوط می شود. نیک از فرمول به عنوان بخشی از یک عبارت بزرگتر IF استفاده می کند و او فرض می کند که خطاهای گرد کردن دیگری در اکسل وجود دارد که می تواند به او برسد و او را گاز بگیرد. . او فکر می کند که آیا راه ساده ای برای جلوگیری از دام های فرمول مانند این وجود دارد؟
قبل از بررسی راه های ساده برای جلوگیری از این نوع مشکل، مهم است که بفهمید چرا مشکل وجود دارد. همانطور که نیک اشاره می کند، واقعاً به حساب باینری و این واقعیت که اکسل اطلاعات را گرد می کند، مربوط می شود. در پشت صحنه، اکسل همیشه اطلاعات را به 15 رقم گرد می کند. محاسبه ای را که نیک با آن کار می کند در نظر بگیرید:
=0.28*100-INT(0.28*100)=0
هنگامی که اکسل برای اولین بار این را محاسبه می کند، اولویت پس از اکسل آن را به این صورت محاسبه می کند:
=(0.28*100-INT(0.28*100))=0
به مجموعه پرانتز اضافی توجه کنید. نتیجه هر چیزی که در سمت چپ آن علامت مساوی نهایی است 3.55E-15 است، به این معنی که شما با این فرمول (دراز) پایان میدهید:
=0.00000000000000355=0
بدیهی است که این درست نیست، به همین دلیل است که مقدار False را دریافت می کنید. راه های مختلفی برای "رفع" این وضعیت وجود دارد. در این مورد، شاید ساده ترین کار این باشد که به سادگی فرمول خود را تغییر دهید تا نیاز به مقایسه با صفر را برطرف کنید:
=0.28*100=INT(0.28*100)
این فرمول همان طور که انتظار دارید True را برمی گرداند. با این حال، این ممکن است برای همه نیازهای شما کار نکند. بنابراین، یک قانون سرانگشتی بهتر برای جلوگیری از مشکلات این است که هرگز به گرد کردن اکسل اعتماد نکنید. شما این کار را با اجرای گرد کردن صریح خود انجام می دهید، همانطور که با این فرمول ها نشان داده شده است:
=INT(0.28*100)-INT(0.28*100)=0
=ROUND(0.28*100,0)-INT(0.28*100)=0
=ROUND(0.28*100,5)-ROUND(0.28*100,5)=0
توجه داشته باشید که در این موارد، به اکسل اجازه نمیدهید تا محاسبات را با دقت کامل انجام دهد، زیرا در مقایسه با یک مقدار خاص، مانند صفر، میتواند نتایج غیرمنتظرهای ایجاد کند. در عوض، شما اکسل را مجبور میکنید تا مقادیر را - تمام مقادیری که با آنها کار میکنید - به هر سطحی از دقت که برای مقایسه خود نیاز دارید گرد کند.
روش دیگر این است که مقایسه را با یک مقدار دقیق، مانند صفر انجام ندهید. در عوض، در مقایسه، مقداری «عامل فاج» را در نظر بگیرید، که امکان گرد کردن مسائل را فراهم میکند. برای مثال، ممکن است تعیین کنید که فقط اهمیت میدهید که مقایسه با یک صدم واحدهایی که فرض میکنید دقیق باشد. در آن صورت، فرمول اصلی را می توان به این صورت تغییر داد:
=0.28*100-INT(0.28*100)
همانطور که انتظار می رود این True برمی گردد.