5

画像を正しく表示するために何かを書こうとしています。「breedtePlaatje」と「hoogtePlaatje」の 2 つの番号があります。これらの 2 つの変数を値でロードすると、「800」と「500」が返されます。「verH」は (500 / 800) = 0,625 であると予想されます。verH = 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;
    }
}

私のアプローチに関するヒントも素敵です。

4

5 に答える 5

11

int を int で割ると、int が得られます。

double verH = (hoogtePlaatje/breedtePlaatje);

割り当ての右側は整数値です。

breedtePlaatje および/または hoogtePlaatje を double に変更すると、期待する答えが得られます。

于 2010-03-08T11:07:01.273 に答える
7

整数除算では、除算結果として整数が返されます。

結果を浮動小数点数にするためには、除算のパラメーターの 1 つを浮動小数点数にする必要があります。これを行うには、それらの 1 つをフロートにキャストします。

double verH = (double)hoogtePlaatje/breedtePlaatje;

または

double verH = hoogtePlaatje/(double)breedtePlaatje;

除算に関するC# 仕様を参照してください。

于 2010-03-08T11:09:58.590 に答える
4

2 つの整数を除算する場合、C# では小数部分が破棄される整数除算が使用されます。あなたの場合、あなたは得ています:

500 / 800 = 0 + 5/8 

小数部分を破棄すると、次のようになります。

500 / 800 = 0

浮動小数点除算を取得するには、必要な精度のレベルに応じて、引数の 1 つを にキャストしdoubleますfloatdecimalこれにより、他の引数が暗黙的に同じ型に変換され、整数ではなく浮動小数点規則を使用して除算が実行されます。ルール、例えば

double result = (double)breedtePlaatje  / hoogtePlaatje ;
于 2010-03-08T11:10:51.680 に答える
2

私は C# を使用したことがありませんが、おそらく次のように、変数の 1 つを double にキャストする必要があります。

double verH = (double)hoogtePlaatje/breedtePlaatje;
于 2010-03-08T11:08:58.217 に答える
1

これを試して:

double verH = double (hoogtePlaatje) / breedtePlaateje;

int を int で割ると、切り捨てられた答えが得られます。それらの 1 つをダブルにキャストすると、分割全体がダブルとして実行されます。

于 2010-03-08T11:10:02.617 に答える