الذي هو أفضل وسيلة للمقارنة بين الجزء الصحيح من رقمين غير صحيح؟

StackOverflow https://stackoverflow.com/questions/236323

  •  04-07-2019
  •  | 
  •  

سؤال

وأنا في حاجة إلى المقارنة الجزء الصحيح من الضعفين لعدم المساواة، وأنا أفعل في هذا:

int iA = (int)dA;
int iB = (int)dB;

if( iA != iB )
{
    ...
}

ولكن أنا أتساءل عما إذا كان هناك طريقة أفضل من هذا.

وشكرا.

إذا كنت Math.Truncate () بدلا من المدلى بها لكثافة العمليات، فإنه لا يزال تكون دقيقة لمقارنة القيم مزدوجة اثنين الناتجة عن المساواة؟

وعن التعليقات تدوين الهنغارية:

وأنا أبدا استخدام HN نفسي، على الأقل ليس في الطريقة معظم الناس القيام به. ولكن هذا هو واحد من هذه الحالات النادرة حيث الدلالي متغير يتعلق مباشرة نوعه. أنا قد اختارت جملة أخرى مثل A_As_Integer وB_As_NonInteger ولكن ما يمكن أن يكون الفرق بعد ذلك؟

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

المحلول

استخدم Math.Truncate () أي

if (Math.Truncate(x) == Math.Truncate(y))

[تحرير] أدركت أن إذا كنت مقارنة أجزاء صحيح الزوجي، الصب إلى int القيم تدير أول من خطر الفيضانات ينبغي أن تكون الزوجي الخاص بك خارج النطاق الذي يمكن أن تكون ممثلة ك int.

واقتطاع يعود إما عشري أو مزدوجة، وتجنب هذه المسألة.

نصائح أخرى

نعم، هذا هو النهج الأفضل.

وعلى افتراض من الصياغة الخاصة بك في سؤالك أنك تخلخل قلقة بشأن التقريب ... فقط الجزء integerr نفسها.

وأي. (الباحث) 4.1 سيعطي نفس النتيجة مثل (الباحث) 4.9

وكما ذكر أوفيد، إذا كنت بحاجة فقط المتغيرات للمقارنة، فإنك سوف تحتاج فقط للادلاء الزوجي في بيان المقارنة. كنت أبحث فقط في النظرية.

وشخصيا، وأنا أحاول تجنب خلق متغيرات إضافية إلا إذا كنت في حاجة إليها.

if ( (int)dA != (int)dB ) {
    ...
}

ومع تطور كود مع مرور الوقت، وبعد المتغيرات إضافية التسكع ليس لأي غرض يؤدي إلى الارتباك. بالطبع، إذا كنت بحاجة إلى هذه المتغيرات، وهذا موضوع آخر:)

ملاحظة جانبية: أنت تبدو وكأنها تحاول تلمح إلى نوع البيانات عن طريق تدوين المجرية بسيط. قد أوصي لا تفعل ذلك؟ إذا كان يجب أن بادئة المعلومات إلى المتغيرات الخاصة بك، في محاولة لبادئة ما هو متغير، بدلا من نوعه. إذا كنت تفعل ذلك، يمكن أن الأخطاء في التعليمات البرمجية يكون من الأسهل أن نرى:

if ( (int)ageA != (int)idB ) {
    ...
}

في هذه الحالة، حتى من دون معرفة ما البيانات، يرى أنك تحاول مقارنة على "سن" مع "معرف" هو فكرة جيدة أن هناك شيئا خطأ هنا.

وأوافق على أن اقتطاع ما تريد.

وبعض المعلومات المفيدة من MSDN :

واقتطاع يعود الرقم الذي يبقى بعد أن تم تجاهل أي الأرقام الكسرية.

ووجولات إلى أقرب عدد صحيح نحو الصفر.

double floatNumber;

floatNumber = 32.7865;
// Displays 32      
Console.WriteLine(Math.Truncate(floatNumber));

floatNumber = -32.9012;
// Displays -32       
Console.WriteLine(Math.Truncate(floatNumber));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top