شعبة في ج # لا تذهب إلى الطريقة التي أتوقعها

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

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أحاول كتابة شيء للحصول على صوري لإظهار بشكل صحيح. لدي 2 أرقام "breedteplaatje" و "hoogteplaatje". عندما أقوم بتحميل هؤلاء 2 vars مع القيم التي أعود فيها "800" و "500" أتوقع أن تكون "فيرا" (500/800) = 0،625. ثو قيمة الفير = 0 ..

هذا هو الرمز:

int breedtePlaatje = Convert.ToInt32(imagefield.Width);
int hoogtePlaatje = Convert.ToInt32(imagefield.Height);

//Uitgaan van breedte plaatje
if (breedtePlaatje > hoogtePlaatje)
{
    double verH = (hoogtePlaatje/breedtePlaatje);
    int vHeight = Convert.ToInt32(verH * 239);

    mOptsMedium.Height = vHeight;
    mOptsMedium.Width = 239;

    //Hij wordt te klein en je krijgt randen te zien, dus plaatje zelf instellen
    if (hoogtePlaatje < 179)
    {
        mOptsMedium.Height = 179;
        mOptsMedium.Width = 239;
    }
}

أي نصائح فيما يتعلق نهجي ستكون جميلة aswell.

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

المحلول

تقسيم int من قبل int يعطي int.

double verH = (hoogtePlaatje/breedtePlaatje);

الجانب الأيمن من الواجب هو قيمة عدد صحيح.

تغيير Britleteplaatje و / أو hoogteplaatje للمضاعفة وسوف تحصل على الإجابة التي تتوقعها.

نصائح أخرى

سوف يؤدي الانقسام الصحيحة إلى عدد صحيح يتم إرجاعه كأجيل قياسي.

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

double verH = (double)hoogtePlaatje/breedtePlaatje;

أو

double verH = hoogtePlaatje/(double)breedtePlaatje;

يرى C # المواصفات فيما يتعلق بالقسمة.

عند تقسيم اثنين من الأعداد الصحيحة، يستخدم C # تقسيم صحيح, ، حيث يتم تجاهل الجزء الكسري. في حالتك، تحصل على:

500 / 800 = 0 + 5/8 

الذي، التخلص من الجزء الكسري، يعطي:

500 / 800 = 0

للحصول على تقسيم نقطة عائمة، يلقي أحد الحجج إلى أي double, float أو decimal اعتمادا على مستوى الدقة التي تحتاجها، والتي ستتسبب في تحويل الوسيطة الأخرى ضمنيا إلى نفس النوع والقسمة التي تنفذ باستخدام قواعد النقطة العائمة بدلا من القواعد الصحيحة، على سبيل المثال

double result = (double)breedtePlaatje  / hoogtePlaatje ;

لم أستخدمها أبدا C #، ولكن ربما ستحتاج إلى إلقاء إحدى المتغيرات للمضاعفة، مثل هذا:

double verH = (double)hoogtePlaatje/breedtePlaatje;

جرب هذا:

double verH = double (hoogtePlaatje) / breedtePlaateje;

إذا قمت بتقسيم INT INT، فستحصل على إجابة مقطوعة. يلقي أحدهم حتى مزدوج، وسيتم الانقسام بأكمله كمضاعفة.

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