División en c # no va por el camino que espero
Pregunta
Estoy tratando de escribir algo a tener en mis imágenes para mostrar correctamente. Tengo 2 números "breedtePlaatje" y "hoogtePlaatje". Cuando cargo esos 2 vars con los valores i volver "800" y "500" i esperan "VERH" para ser (500/800) = 0,625. Aunque el valor de VERH = 0 ..
Este es el 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;
}
}
¿Algún consejo con respecto a mi enfoque sería precioso también.
Solución
Dividing int por int da un int.
double verH = (hoogtePlaatje/breedtePlaatje);
El lado derecho de la asignación es un valor entero.
Cambiar breedtePlaatje y / o hoogtePlaatje para duplicar y obtendrá la respuesta que espera.
Otros consejos
La división entera dará lugar a un número entero que es devuelto como el resultado de la división.
Es necesario uno de los parámetros de la división de ser un flotador para que el resultado sea un flotador. Usted puede hacer esto mediante fundición uno de ellos a un flotador.
double verH = (double)hoogtePlaatje/breedtePlaatje;
o
double verH = hoogtePlaatje/(double)breedtePlaatje;
C # spec con respecto a la división .
Al dividir dos números enteros, C # utiliza división entera, donde se desecha la parte fraccionaria . En su caso, usted está consiguiendo:
500 / 800 = 0 + 5/8
Lo cual, desechando la parte fraccionaria, da:
500 / 800 = 0
Para obtener división de coma flotante, echados uno de los argumentos a cualquiera double
, float
o decimal
dependiendo del nivel de precisión que necesita, lo que hará que el otro argumento que ha de convertirse de forma implícita al mismo tipo y la división llevó a cabo utilizando reglas de punto en lugar de reglas enteros flotante, por ejemplo
double result = (double)breedtePlaatje / hoogtePlaatje ;
Nunca he utilizado C #, pero probablemente usted tendrá que emitir una de las variables para duplicar, como esto:
double verH = (double)hoogtePlaatje/breedtePlaatje;
Prueba esto:
double verH = double (hoogtePlaatje) / breedtePlaateje;
Si se divide un entero por un int, obtendrá una respuesta truncada. Escoge uno de ellos hasta un doble, y toda la división se hará como doble.