Divisão em c # não vai do jeito que eu esperar
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.
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.