اطلاعیه

Collapse
No announcement yet.

مشکل در عملگر تقسیم

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در عملگر تقسیم

    با سلام
    من در کد ویژن وقتی از عملگر تقسیم استفاده میکنم در حاصل تقسیم قسمت اعشاری اون حذف میشه،با اینکه متغیر من از نوع float هست.برنامه به این صورت هست
    :
    float dc;
    unsigned char c[];
    dc=3/2;
    ftoa(dc,3,c);
    lcd_clear();
    lcd_puts(c);
    عددی که در متغیر dc قرار میگیره 1 هست.
    مشکل کجاست؟

    #2
    پاسخ : مشکل در عملگر تقسیم

    از sprintf
    استفاده کن

    دیدگاه


      #3
      پاسخ : مشکل در عملگر تقسیم

      نوشته اصلی توسط بنیامین خلیلی
      از sprintf
      استفاده کن
      از اون دستور هم استفاده کردم،وقتی به صورت sprintf(c,"%u",dc) مینویسم کلا صفر نشون میده،ولی وقتی به صورت sprintf(c,"%u",(3/2)) مینویسم همون 1 رو نشون میده،من فکر میکنم مشکل در عملگر تقسیم،چو وقتی به صورت :
      dc=3/2;
      dc=dc*2;
      نوشتم و بعد نمایش دادم عدد 2 رو نشون داد.
      نا گفته نمونه که برای ضرب مشکل نداره،یعنی 3*0.5 رو به درستی 1.5 نمایش میده!

      دیدگاه


        #4
        پاسخ : مشکل در عملگر تقسیم

        دوست عزیز من برای شما یه پیشنهاد بهتر دارم.
        به جای استفاده از متغیر float بیا از int استفاده کن.توی میکرو هایی که از cpu های floating-point استفاده نمیکنن خیلی پیچیده میشه یه همچین تقسیمی.بهتره به جای 3/2 از 30/2 استفاده کنی اما تو lcdعدد 15 رو یه نقطه بذار وسطش بشه 1.5
        البته این فقط یه پیشنهاده
        آنکس که بداند و بداند که بداند /، اسب شرف از گنبد گردون بجهاند
        آنکس که بداند و نداند که بداند / ، بيدارش نماييد که بسي خفته نماند
        آنکس که نداند و بداند که نداند / ، لنگان خرک خويش به مقصد برساند
        آنکس که نداند و نداند که نداند / ، در جهل مرکب ابدالدهر بماند

        دیدگاه


          #5
          پاسخ : مشکل در عملگر تقسیم

          نوشته اصلی توسط e_taghavi
          دوست عزیز من برای شما یه پیشنهاد بهتر دارم.
          به جای استفاده از متغیر float بیا از int استفاده کن.توی میکرو هایی که از cpu های floating-point استفاده نمیکنن خیلی پیچیده میشه یه همچین تقسیمی.بهتره به جای 3/2 از 30/2 استفاده کنی اما تو lcdعدد 15 رو یه نقطه بذار وسطش بشه 1.5
          البته این فقط یه پیشنهاده
          ممنون پیشنهاد خوبی بود اما برای محاسباتی که پشت سر هم انجام میشه و هی ایجاد اعشار میشه باید همش ضرب انجام بدی تا اعشار حذف بشه و انجام محاسبه رو طولانی میکنه

          دیدگاه


            #6
            پاسخ : مشکل در عملگر تقسیم

            آقا ممنون مشکلم حل شد :biggrin:
            باید عدد دوم رو به صورت اعشاری بنویسی،یعنی 3/2.0 اونوقت درست میشه :nice:

            دیدگاه


              #7
              پاسخ : مشکل در عملگر تقسیم

              اگر بعد از مساوی و در داخل یک پرانتز بنویسید float مشکل حل میشه و توصیه می کنم قبل از ادامه کار با کدویژن بخش کار با متغییرهای یک کتاب اموزش سی رو بخونید چون این قسمت خیلی خیلی مهمه.

              موفق باشید
              چرا ناراحتی پاتریک!
              + امروز ی بچه دیدم سرچهارراه گل میفروخت
              - از دیدنش ناراحت شدی؟
              + نه
              پس چی ناراحتت کرده
              + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
              ------------------------------------------------------------------------------------------------------
              تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
              ------------------------------------------------------------------------------------------------------
              محصولات

              دیدگاه


                #8
                پاسخ : مشکل در عملگر تقسیم

                نوشته اصلی توسط abolfazles
                ممنون پیشنهاد خوبی بود اما برای محاسباتی که پشت سر هم انجام میشه و هی ایجاد اعشار میشه باید همش ضرب انجام بدی تا اعشار حذف بشه و انجام محاسبه رو طولانی میکنه
                شاید توی ظاهر طولانی تر بشه اما در عمل قابل قیاس نیست.عملیات float خیلی زمان گیره . برای مطالعه این موضوع میتونید تو نت سرچ کنید تفاتوت fixed point با floating point
                آنکس که بداند و بداند که بداند /، اسب شرف از گنبد گردون بجهاند
                آنکس که بداند و نداند که بداند / ، بيدارش نماييد که بسي خفته نماند
                آنکس که نداند و بداند که نداند / ، لنگان خرک خويش به مقصد برساند
                آنکس که نداند و نداند که نداند / ، در جهل مرکب ابدالدهر بماند

                دیدگاه


                  #9
                  پاسخ : مشکل در عملگر تقسیم

                  روش شما درسته. اما یکجا کدویژن داره اذیت می کنه.
                  وقتی که از توابعی مثل ftoa، sprintf و ... استفاده میشخ، چون این دستورات حجم بالایی از حافظه رو میگیرن، کامپایلر به صورت پیش فرض میاد و عدد رو صحیح در نظر میگیره. برای همین شما باید برید و عرض این دستورات رو زیاد کنید. برید به
                  کد:
                  project->Configure->C compiler->sprintf feature
                  اونجا تنظیمات رو بزارید روی آخرین گزینه یعنی float,width, ...
                  ---------
                  .
                  .
                  ...........

                  دیدگاه

                  لطفا صبر کنید...
                  X