پاسخ غلط برنامه !!!
سلام
کار قسمتی از برنامهای که نوشتم (و مطمئنم درست نوشتم!) این هست که مثلاً ۵ رو از عدد ۶۳۵ در بیاره:
1 2 3 4 5 6 7 8 |
// است n عدد ما float digit; // رقم مورد نظر اینجا می خواهد قرار بگیرد int j = 1; j *= 10; // با این ۱۰ رقم ۵ از ۶۳۵ بدست می آید حالا برای ارقام دیگر می تواند ۱۰۰ یا ۱۰۰۰ هم باشد digit /= j; digit -= (int)digit; digit *= 10; |
حالا ۵ مقدار digit است!
حالا مشکل کجاست؟
حالا برای این عدد درست در اومد، اما واسه عددی مثل ۲۱ خروجی ۰ است!!!
چرا؟ مگه جواب ۱ نیست؟ بله اما چون وقتی در خط ۶ کد بالا، ۲۱ تقسیم بر ۱۰ میشه، جواب ۲.۰۹۹۹۹۹۹ است!!!!!!
در حالی که جواب درست ۲.۱ است!
برای متغیرهایی از نوع double هم همین اتفاق میفته
خب، مشکل کجاست؟ ممنون میشم هر چه زودتر یک دلیل و یک راه حل بدهید، چون عجله دارم … 🙏🙏🙏
پاسخ ها ( ۲ )
مهندس خیلی نفهمیدم سوالت چی هست
حالا من برداشت خودم رو براتون شرح میدم :
شما میخواین که مثلا عدد ۶۳۵ , فقط عدد اولش یعنی ۵ بمونه
اگر منظورتون اینه که اصلا سخت نیست و فقط یک خط کد داره
num %= 10
هر عددی باقیماندش به ۱۰ نتیجش عدد اول اون میشه
سلام
بله تقریباً منظورم اینه. چرا تقریباً؟ چون شاید لازم بشه مثلاً از همین ۶۳۵، عددی مثل ۳ یا ۶ رو دربیاریم.
که در این صورت فقط به این یک خط کد نیاز نداریم …
اما جالب بود خط آخر پیامتون: « هر عددی باقیماندش به ۱۰ نتیجش عدد اول اون میشه »
تاحالا بهش فکر نکرده بودم … سعی داشتم بدون عملگر % کار رو پیش ببرم
اما مشکل من:
همون طور که در بالا گفتم چرا ۲۱ تقسیم بر ۱۰ میشه ۲.۰۹۹۹۹۹۹ ؟
اما بخاطر راهنمایی % تون دیگه لازم نیست این تقسیم رو انجام بدم.
خیلی ممنون -> %
ولی تقسیم بالا چرا این طور شد؟