Pergunta

Estou tentando escrever algo para chegar em minhas imagens para mostrar corretamente. Tenho 2 números "breedtePlaatje" e "hoogtePlaatje". Quando eu carregar os 2 vars com os valores i voltar "800" e "500" i esperar "Verh" ser (500/800) = 0.625. Tho o valor de Verh = 0 ..

Este é o código:

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

Todas as dicas sobre a minha abordagem seria adorável cabeceira.

Foi útil?

Solução

Dividir int por int dá um int.

double verH = (hoogtePlaatje/breedtePlaatje);

O lado direito da atribuição é um valor inteiro.

Alterar breedtePlaatje e / ou hoogtePlaatje dobrar e você vai ter a resposta que você espera.

Outras dicas

divisão Integer irá resultar em um número inteiro a ser retornado como o resultado da divisão.

Você precisa de um dos parâmetros da divisão ser um flutuador para que o resultado seja uma bóia. Você pode fazer isso lançando um deles para um float.

double verH = (double)hoogtePlaatje/breedtePlaatje;

ou

double verH = hoogtePlaatje/(double)breedtePlaatje;

Consulte o C # especificação sobre divisão .

Quando você divide dois inteiros, C # usos inteiros divisão, onde a parte fracionária é descartada . No seu caso, você está recebendo:

500 / 800 = 0 + 5/8 

O que, descartando a parte fracionária, dá:

500 / 800 = 0

Para obter a divisão de ponto flutuante, lançou um dos argumentos para ambos os double, float ou decimal dependendo do nível de precisão que você precisa, o que fará com que o outro argumento a ser implicitamente convertido para o mesmo tipo e da divisão realizada utilizando ponto flutuante regras em vez de regras inteiros, por exemplo

double result = (double)breedtePlaatje  / hoogtePlaatje ;

Eu nunca usei C #, mas provavelmente você vai precisar de um elenco das variáveis ??para o dobro, como este:

double verH = (double)hoogtePlaatje/breedtePlaatje;

Tente isto:

double verH = double (hoogtePlaatje) / breedtePlaateje;

Se você dividir um int por um int, você vai obter uma resposta truncado. um elenco de-los até um casal e toda a divisão será feita como dupla.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top