Frage

Im Versuch, etwas zu schreiben, meine Bilder zu erhalten richtig zu zeigen. Ich habe 2 Nummern „breedtePlaatje“ und „hoogtePlaatje“. Als ich diesen 2 Vars mit den Werten laden bekomme ich zurück „800“ und „500“ Ich erwarte „verh“ zu sein (500/800) = 0.625. Tho den Wert von verh = 0 ..

Dies ist der Code:

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;
    }
}

Irgendwelche Tipps mein Ansatz in Bezug wäre schön als gut.

War es hilfreich?

Lösung

Dividing int von int gibt einen int.

double verH = (hoogtePlaatje/breedtePlaatje);

Die rechte Seite der Zuweisung ein ganzzahliger Wert ist.

Ändern breedtePlaatje und / oder hoogtePlaatje zu verdoppeln und Sie erhalten die Antwort, die Sie erwarten bekommen.

Andere Tipps

Integer-Division in einem Integer führen wird als Divisionsergebnis zurückgegeben wird.

Sie müssen einen der Parameter der Division ein Schwimmer, um das Ergebnis zu sein, ein Schwimmer sein. Sie können dies tun, indem einer von ihnen mit einem Schwimmer zu werfen.

double verH = (double)hoogtePlaatje/breedtePlaatje;

oder

double verH = hoogtePlaatje/(double)breedtePlaatje;

Siehe das C # spec Teilung in Bezug auf .

Wenn Sie zwei ganze Zahlen teilen, C # verwendet Integer-Division , wobei der Bruchteil wird verworfen . In Ihrem Fall, Sie bekommen:

500 / 800 = 0 + 5/8 

Which, dem Bruchteil zu verwerfen, ergibt sich:

500 / 800 = 0

Gleitkomma-Division zu gelangen, warf eines des Arguments entweder double, float oder decimal auf der Ebene der Präzision ab, die Sie benötigen, die das andere Argument bewirkt, dass implizit auf die gleiche Art umgewandelt zu werden und die Division durchgeführt unter Verwendung von Punkt Regeln statt integer floating Regeln, zB

double result = (double)breedtePlaatje  / hoogtePlaatje ;

Ich habe noch nie C # verwendet, aber wahrscheinlich müssen Sie eine der Variablen werfen zu verdoppeln, wie folgt aus:

double verH = (double)hoogtePlaatje/breedtePlaatje;

Versuchen Sie folgendes:

double verH = double (hoogtePlaatje) / breedtePlaateje;

Wenn Sie einen int durch einen int dividieren, erhalten Sie eine verkürzte Antwort. Cast einen von ihnen bis zu einem doppelten, und die gesamten Division als doppelt durchgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top