سؤال

لماذا كلما تجميع وتشغيل التعليمات البرمجية التالية في Visual Studio 2008:

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);

وأحصل على قيمة غير صحيحة من 26 في حين أن الجواب هو 25.

ولكن عند استخدام قوالب ثابتة على الزوجي، وأحصل على الجواب الصحيح الذي هو 25.

وكيف يمكن تفسير إخراج الخطأ؟

هل كانت مفيدة؟

المحلول

وانها على حق تماما.

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);

وماذا تتوقع بدلا من ذلك؟ المترجم أولا بتقييم الجانب الأيمن، ثم ضمنيا تحويل إلى كثافة العمليات. وهكذا، يصبح 26.0 26

عند يلقي قبل إضافة، ثم أنت ذاهب لإضافة 10 و15، مما يؤدي إلى 25:)

نصائح أخرى

في الواقع، لا يمكن الاعتماد على أرقام النقطة العائمة إلى جولة من اي من الاتجاهين عند إجراء التحويل التلقائي. إذا كان يتم تمثيل 26.0 من 26.00005، وسوف يتم تقريب إلى 26، إذا كان يمثله 25.999995، وسوف يتم تقريب إلى 25. إذا كنت تريد أن تتأكد من استخدام معيار round C وظيفة، المحددة في math.h. قائلا <ط> وهكذا، يصبح 26.0 26 ليس صحيحا تماما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top