ج كيفية تحويل int إلى تعويم


الاجابه 1:

أولاً ، إذا كان الجزء غير الكسري من عدد عشري يمكن تمثيله على أنه int ، فإن التحويل الضمني الذي "يدور نحو الصفر" (أي يسقط الكسر) موجود:

int r (float f) { نتيجة int = f ؛نتيجة العودة // يمكنك فقط كتابة "return f؛" في حين أن.}

لاحظ أنه إذا كان int لا يمكن أن يمثل النتيجة ، "السلوك غير محدد" (مما يعني أنه يُسمح لبرنامجك بفعل أي شيء فيما يتعلق بالمعيار).

إذا لم يكن هذا هو التقريب الذي تريده ، فهناك عدد من وظائف المكتبة القياسية المعلنة فيها يمكن أن تفعل الحيلة. أولاً الأبسط:

  • سقف / أرضية دائرية لأعلى أو لأسفل ، على التوالي. لا تزال النتيجة عائمة ، يمكنك استخدام التحويل الضمني الموضح أعلاه للحصول على عدد صحيح.
  • roundf ، والذي يتم تقريبه إلى أقرب قيمة صحيحة ، فيما عدا أنه تم تقريب الحالة .5 بعيدًا عن الصفر (لذلك يتم تقريب 1.5F إلى 2.0F ، ولكن -3.5F يتم تقريبه إلى -4.0F).
  • lroundf و llroundf ، اللذان يشبهان roundf ، لكنهما ينتجان نتيجة طويلة أو طويلة ، على التوالي. إذا كان لا يمكن تمثيل النتيجة النظرية بنوع النتيجة ، فإن النتيجة الفعلية تكون غير محددة (على سبيل المثال ، يمكن أن تكون قيمة "أيًا كانت" من هذا النوع). قد يتم تعيين errno على EDOM أو ERANGE.
  • truncf ، وهو مشابه للتحويل الضمني الموصوف أعلاه ، باستثناء أن النتيجة لا تزال تعويمًا.

هناك وظائف تقريب إضافية (أيضًا بتنسيق ) التي يتم تحديد سلوكها التقريبي من خلال "اتجاه التقريب الحالي" الذي تم إنشاؤه بواسطة استدعاء fesetround (وظيفة معلنة في ، رأس يتعامل مع مجموعة متنوعة من الإعدادات في "بيئة الفاصلة العائمة"). يجب أن تكون الوسيطة الخاصة بهذه الوظيفة هي قيمة أحد وحدات الماكرو القياسية FE_DOWNWARD أو FE_TONEAREST أو FE_TOWARDZERO أو FE_UPWARD ، ولكن قد يكون أي من وحدات الماكرو هذه غير معرف إذا كان وضع التقريب المقابل غير متوفر. يمكنك استرداد وضع التقريب الحالي باستخدام fegetround (). الوظائف التي تأخذ ذلك في الاعتبار هي:

  • nearintf و rintf ، اللذان يشبهان roundf باستثناء أن الحالة .5 تتبع اتجاه التقريب الحالي (وقد تثير rintf استثناءًا للفاصلة العائمة يشير إلى نتيجة "غير دقيقة").
  • lrintf و llrintf ، والتي تشبه inintf المجاور ، ولكنها تنتج نتيجة طويلة أو طويلة ، على التوالي. إذا كان لا يمكن تمثيل النتيجة النظرية بنوع النتيجة ، فإن النتيجة الفعلية تكون غير محددة (على سبيل المثال ، يمكن أن تكون قيمة "أيًا كانت" من هذا النوع). قد يتم تعيين errno على EDOM أو ERANGE.

الاجابه 2:

أبسط طريقة هي int x = (int) (f + 0.5) ؛ يعمل هذا في معظم الأحيان مع الأرقام الموجبة. للأرقام السالبة يمكنك طرح 0.5. أو

حدد دالة قيمة مطلقة ودالة دائرية:

#define ABS (X) ((X> = 0)؟ X: - (x))#def ROUND (X) (X> = 0)؟ (دولي) (X + 0.5): (دولي) - (ABS (X) +0.5)int x = ROUND (f) ؛

حسابي

الطريقة الحسابية للتقريب رياضيًا هي: 1. حدد عدد المنازل العشرية التي تريد أخذها كأهمية (ن) 2. قسّم الرقم على 10 ^ {- n}. (م) 3. خذ أقرب نتيجة عدد صحيح. (جولة تعويم إلى مكان 1). (q) 4. اضرب m * q للحصول على الرقم المقرّب. (ض) 5. تحويل إلى عدد صحيح: إذا كان الجزء الكسري> 0.5 ، اقتطع الجزء الكسري وأضف 1. وإلا اقتطع الجزء الكسري.

لماذا فعل هذا؟ لأن الخيار الافتراضي لـ C هو تقريب الجزء الكسري ، بغض النظر عن مدى قربه من 1. لذا عليك تقسيم الرقم على كمية صغيرة لتأخذ في الاعتبار الأرقام المعنوية. من خلال تقريب النتيجة الوسيطة ، ستهتم بأخطاء التقريب.

بشكل عام لـ: الأرقام الموجبة: إذا كان الرقم الموجود على يمين العلامة العشرية (خانة العشرات)> = 5 تقريبه إلى الرقم الأعلى التالي ، وإلا اقتطع. الأرقام السالبة: إذا كان الرقم الموجود على يمين العلامة العشرية (خانة الجزء من عشرة) هو <= 5 مقطوعًا ، وإلا فقربه إلى الرقم السالب التالي. هذا يعتني بحالة الحافة بالضبط 0.5 إيجابية أو سلبية.

/ * أمثلة جيدة وسيئة * /كثافة العمليات س ؛تعويم f ، m ، n ، p ، z ؛ // حسن f = -13.486 ؛ن = .01 ؛ // مكانينم = و / ن ؛ // م = -1348.6م = سقف (م) ؛ // م = -1348.0ض = م / ن ؛ // ض = -13.48س = (كثافة العمليات) ض ؛ // س = -13// حسنو = 0.501 ؛ ن = 0.1 ؛ // مكان واحدم = و / ن ؛ // م = 5.01م = سقف (م) ؛ // م = 6.0ض = م / ن ؛ // ض = .6س = (كثافة العمليات) ض ؛ // س = 1// سيئة f = 13.486 ؛ن = سقف (و) ؛ // ن = 14.000// سيئةf = -13.486 ؛ن = أرضية (و) ؛ // ن = -14.000// سيء بسبب التناقضاتو = 0.50 ؛ ن = سقف (و) ؛ // ن = 1.0ن = أرضية (و) ؛ // ن = 0.0f = -0.50 ؛ ن = سقف (و) ؛ // ن = 0.0ن = أرضية (و) ؛ // ن = -1.0// لا يزال غير جيد و = 0.50 ؛ن = 0.1 ؛ // 1 مكانم = و / ن ؛ // م = 5.0م = سقف (م) ؛ // م = 5.0ض = م / ن ؛ // ض = 0.5س = (كثافة العمليات) ض ؛ // س = 0 ليس جيدًا// جرب جولة و = 0.5 ؛م = roundf (و) ؛ // م = 1.0ع = roundf (-f) // م = -1.0f = -0.5 ؛م = roundf (و) ؛ // م = -1.0ع = roundf (-f) // م = 1.0

الاجابه 3:

يمكنك القيام بذلك عن طريق استخدام نوع الصب. بناء الجملة هو-

مثال:

تعويم س ؛

س = 3.14 ؛

int ذ ؛

ص = (كثافة العمليات) س ؛

printf ("٪ d" ، ص) ؛

انتاج:

3

حقيقة ماحصل؟ سأشرح ذلك بأخذ تشبيه مشهور.

فكر في دلو مملوء بالماء بالكامل. لنفترض الآن أن لديك كوبًا. ما هو الحد الأقصى للمياه التي يمكنك إخراجها من الدلو؟ الجواب- كوب.

هنا يكون الدلو عائمًا (4 بايت) ، ويكون القدح int (2 بايت). صب النوع هو عملية الملء ، ويتم فقدان الماء (البيانات) أثناء القيام بذلك.

أتمنى أن يساعدك هذا؛)


الاجابه 4:

لا يمكن تحويل أي رقم عائم إلى عدد صحيح. ولكن يمكن تحويل عدد صحيح إلى عدد عشري باستخدام تنسيقه

محدد

الموضح في المثال أدناه ، يمكن تمرير عدد عشري إلى متغير من نوع عدد صحيح. وبعد تمرير القيمة إلى متغير عدد صحيح ، يتم تحويلها إلى قيمة عددية.

#تضمن

عدد باطل (int e)

{

printf ("٪ d" ، هـ) ؛

}

انت مين()

{

تعويم ج = 9.0000 ؛

الأسطوانات (ج) ؛

}

في المثال أعلاه ، قمنا بتمرير قيمة تعويم إلى متغير عدد صحيح. سيكون إخراج البرنامج أعلاه 9.


الاجابه 5:

هناك عدة طرق للتقريب. ألق نظرة على وظائف المكتبة هذه ، والتي كانت متوفرة منذ C99:

  • roundf ، التي تُرجع عددًا عشريًا يمثل القيمة التكاملية الأقرب للوسيطة ، مع تقريب حالات المنتصف بعيدًا عن الصفر.
  • floorf ، الذي يدور لأسفل ، ويعيد أكبر قيمة متكاملة ليست أكبر من الوسيطة.
  • ceilf ، الذي يدور لأعلى ، ويعيد أصغر قيمة متكاملة لا تقل عن الوسيطة.
  • nearintf ، والذي يتم التقريب إلى قيمة متكاملة ، باستخدام اتجاه التقريب المحدد بواسطة fegetround (الذي يُرجع قيمة تشير إلى وضع اتجاه التقريب ، كما هو محدد في بيئة النقطة العائمة الحالية.)

تتلقى كل وظيفة من هذه الوظائف وسيطة عائمة ، وتُرجع نتيجة عائمة ، والتي يمكنك بعد ذلك تحويلها إلى int.


الاجابه 6:

ستعمل الدالة round () في الرياضيات. h. يجب تجميع ما يلي والعمل بشكل جيد (على الرغم من أنني لم أقم بتجميعه في الواقع):

#تضمن / * استيراد النموذج الأولي لـ round () من math.h * جولة مزدوجة (مزدوجة) ؛ * /#تضمن انت مين() { تعويم أنا = 5.4 ، ي = 5.6 ؛ / * يؤدي كل مما يلي ضمنيًا إلى تحويل العوام إلى الضعف * للمعلمة ثم النتيجة المزدوجة يمكن أن تكون بأمان* يلقي إلى كثافة العمليات دون فقدان الدقة. طبعا انت * قد ترغب في استخدام long بدلاً من int ولكن هذا يعتمد * في النطاق المتوقع. * /int ii = (int) round (i) ؛ / * أسماء المتغيرات Horrid لكنها مجرد مثال. * / int jj = (int) round (j) ؛/ * الآن اطبع القيم. * / printf ("الجولة٪ f هي٪ f وهي أيضًا٪ d \ n" ، i ، round (i) ، ii) ؛ printf ("الجولة٪ f هي٪ f وهي أيضًا٪ d \ n" ، j ، round (j) ، jj) ؛ العودة 0 ؛}

تم تعديل المثال من:

C - دالة دائرية ()

.


الاجابه 7:

لتحويل رقم عائم إلى رقم صحيح ، يجب عليك استخدام نوع الصب (Typecasting ، أو تحويل النوع ، هي طريقة لتغيير كيان من نوع بيانات إلى آخر).

#تضمن باطل رئيسي () { تعويم var1 = 3.141592653589793238 ؛ int var2 ؛var2 = (int) var1 ؛ // typecasting (تحويل عدد عشري إلى عدد صحيح) printf ("قيمة عدد صحيح:٪ d" ، var2) ؛}

انتاج |


الاجابه 8:

الجواب: (int)

يمكنك ببساطة استخدام cast (int) لتحويل عدد عشري إلى عدد صحيح.

مثله

your_variable = (int) your_variable

ما هي وظيفة (int)؟

يخبر المترجم أنك تريد معاملة القيمة التي أرجعها malloc كمؤشر إلى عدد صحيح.


الاجابه 9:
تعويم أ = 2.33 ؛int b = (int) a ؛printf ("٪ d" ، ب) ؛

سيكون الإخراج: 2


الاجابه 10:

يحدث صب النوع التلقائي عندما ،

  • النوعان متوافقان
  • نوع الهدف أكبر من نوع المصدر

مثال:

اختبار الطبقة العامة{ الرئيسية العامة الثابتة الفراغ (سلسلة [] args) { int أنا = 100 ؛ طويل l = أنا ؛ // لا يوجد نوع صريح مطلوبتعويم f = l ؛ // لا يوجد نوع صريح مطلوب System.out.println ("قيمة Int + i) ؛ System.out.println ("قيمة طويلة" + l) ؛ System.out.println ("Float value" + f) ؛ } }

انتاج :

القيمة Int 100قيمة طويلة 100قيمة تعويم 100.0

الاجابه 11:

حسنًا ، يمكنك استخدام وظيفتين ، "floor ()" و "ceil ()" لتحويل قيمة عائمة إلى عدد صحيح. مثال:-

تعويم أ = 3.5 ؛

int b = floor (a) ؛ // سيؤدي هذا إلى ضبط "ب" على 3

int b = ceil (a) ؛ // سيؤدي هذا إلى تعيين "ب" على 4