سلام! بهعنوان یک تامینکننده سوئیچ، اغلب از من سؤالات فنی درباره سوئیچها پرسیده میشود، و یکی از مواردی که کمی پیش میآید این است که آیا دستور سوئیچ را میتوان با اعداد نقطه شناور در C++ استفاده کرد یا خیر. بیایید به این موضوع بپردازیم و پاسخ را پیدا کنیم.


اول از همه، اجازه دهید به سرعت خلاصه کنیم که عبارت switch در C++ چیست. دستور سوئیچ یک دستور جریان کنترلی است که اجازه می دهد یک متغیر برای برابری در برابر لیستی از مقادیر آزمایش شود. هر مقدار یک case نامیده می شود و دستور switch به حروف کوچکی که با مقدار متغیر مطابقت دارد می پرد. زمانی که چندین شرط برای بررسی دارید، این یک راه مفید برای ساده کردن یک سری از عبارات if - else است.
int num = 2; switch(num) { case 1: std::cout << "عدد 1 است." << std::endl; شکستن مورد 2: std::cout << "عدد 2 است." << std::endl; شکستن پیش فرض: std::cout << "عدد نه 1 است و نه 2." << std::endl; }
در مثال بالا، دستور switch مقدار متغیر عدد صحیح را بررسی می کنددر یک. اگردر یک1 است، "عدد 1 است" را چاپ می کند. اگر 2 باشد، "عدد 2 است" را چاپ می کند. و اگر هیچکدام از اینها نباشد، به سمت می رودپیش فرضمورد
حالا بیایید در مورد اعداد ممیز شناور صحبت کنیم. اعداد ممیز شناور برای نمایش اعداد واقعی با قسمت کسری مانند 3.14 یا 2.718 استفاده می شوند. آنها با استفاده از فرمت خاصی در حافظه ذخیره می شوند که می تواند منجر به برخی مشکلات دقیق شود.
بنابراین، آیا می توانیم از دستور switch با اعداد ممیز شناور در C++ استفاده کنیم؟ پاسخ کوتاه نه است. استاندارد C++ به صراحت بیان می کند که عبارت در دستور switch باید یک نوع انتگرال یا شمارش داشته باشد. انواع نقطه شناور، مانندشناورودو برابر کردن، مجاز نیستند.
دلیل این محدودیت عمدتاً به دلیل مسائل دقیق اعداد ممیز شناور است. اعداد ممیز شناور به صورت باینری نمایش داده می شوند و همه اعداد اعشاری را نمی توان دقیقاً به صورت باینری نشان داد. به عنوان مثال، عدد اعشاری 0.1 را نمی توان دقیقاً به صورت یک عدد باینری شناور نشان داد. این بدان معناست که وقتی دو عدد ممیز شناور را برای برابری مقایسه میکنید، ممکن است به دلیل دقت نمایش، تفاوت کوچکی وجود داشته باشد.
float a = 0.1; شناور b = 0.1; if(a == b) { std::cout << "مساوی هستند." << std::endl; } else { std::cout << "آنها برابر نیستند." << std::endl; }
در تئوری،الفوبباید برابر باشند، اما به دلیل مسائل دقت، ممکن است تفاوت کمی بین آنها وجود داشته باشد و مقایسه ممکن است آنطور که انتظار می رود کار نکند. از آنجایی که یک دستور سوئیچ بر مقایسه برابری دقیق متکی است، استفاده از اعداد ممیز شناور منجر به رفتار غیرقابل پیش بینی می شود.
اما نگران نباشید! در صورت نیاز به رسیدگی به موارد مختلف بر اساس مقادیر ممیز شناور، هنوز راههایی برای دستیابی به عملکرد مشابه وجود دارد. یکی از رویکردهای رایج استفاده از مجموعه ای از عبارات if - else با تحمل مناسب برای مقایسه های ممیز شناور است.
مقدار شناور = 3.14; if(value >= 3.0 && value < 3.2) { std::cout << "مقدار در محدوده [3.0, 3.2) قرار دارد." << std::endl; } else if(value >= 3.2 && value < 3.4) { std::cout << "مقدار در محدوده [3.2, 3.4) قرار دارد." << std::endl; } else { std::cout << "مقدار خارج از محدوده های تعریف شده است." << std::endl; }
در این مثال، از دستور if - else استفاده می کنیم تا بررسی کنیم که آیا مقدار ممیز شناور است یا خیرارزشدر محدوده های خاصی قرار می گیرد. به این ترتیب، میتوانیم موارد مختلف را بر اساس مقدار عدد ممیز شناور بدون تکیه بر مقایسههای برابری دقیق انجام دهیم.
به عنوان یک تامین کننده سوئیچ، می دانم که برنامه های مختلف به انواع مختلفی از سوئیچ ها نیاز دارند. یکی از انواع سوئیچ ها که به طور گسترده در بسیاری از صنایع استفاده می شودسوئیچ فشار الکترونیکی. فشار سوئیچ های الکترونیکی برای نظارت و کنترل فشار در سیستم های مختلف استفاده می شود. آنها را می توان طوری برنامه ریزی کرد که وقتی فشار به یک سطح معین می رسد، یک عمل را آغاز کنند که در کاربردهایی مانند اتوماسیون صنعتی، سیستم های HVAC و سیستم های هیدرولیک بسیار مفید است.
اگر در بازار سوئیچهای با کیفیت بالا هستید، چه برای یک پروژه برنامهنویسی C++ که شامل کنترل دستگاههای فیزیکی باشد و چه برای سایر کاربردهای صنعتی، ما شما را تحت پوشش قرار میدهیم. شرکت ما طیف گسترده ای از سوئیچ ها از جمله فشار سوئیچ های الکترونیکی را با مشخصات و ویژگی های مختلف برای رفع نیازهای خاص شما ارائه می دهد.
اگر علاقه مند به کسب اطلاعات بیشتر در مورد محصولات ما هستید یا می خواهید در مورد نیازهای خود با جزئیات صحبت کنید، در تماس با ما دریغ نکنید. ما اینجا هستیم تا به شما کمک کنیم راه حل سوئیچ عالی برای پروژه خود پیدا کنید. چه یک علاقهمند باشید که روی یک پروژه کوچک کار میکنید یا یک تولیدکننده صنعتی در مقیاس بزرگ، ما میتوانیم سوئیچهای مورد نیاز شما را با قیمت رقابتی ارائه کنیم.
در پایان، در حالی که نمیتوانید از دستور switch با اعداد ممیز شناور در C++ استفاده کنید، روشهای جایگزینی برای رسیدگی به موارد مختلف بر اساس مقادیر ممیز شناور وجود دارد. و اگر به دنبال سوئیچ های قابل اعتماد هستید، ما تامین کننده ای هستیم که می توانید به آن اعتماد کنید. بنابراین، امروز با ما تماس بگیرید و بیایید یک همکاری عالی را شروع کنیم!
مراجع
- اسناد کتابخانه استاندارد C++
- "زبان برنامه نویسی C++" اثر بیارن استروستروپ
