Divisione in C # non andare il modo in cui mi aspetto
Domanda
Nel tentativo di scrivere qualcosa per ottenere le mie immagini per mostrare correttamente. Ho 2 numeri "breedtePlaatje" e "hoogtePlaatje". Quando carico quei 2 Vars con i valori al mio ritorno "800" e "500" Mi aspetto "verh" essere (500/800) = 0,625. Tho il valore di verh = 0 ..
Questo è il codice:
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;
}
}
Tutti i suggerimenti per quanto riguarda il mio approccio sarebbe bello pure.
Soluzione
divisione int da int dà un int.
double verH = (hoogtePlaatje/breedtePlaatje);
Il lato destro della assegnazione è un valore intero.
Cambia breedtePlaatje e / o hoogtePlaatje di raddoppiare e otterrete la risposta che ci si aspetta.
Altri suggerimenti
Divisione intera comporterà un numero intero di essere restituito come risultato della divisione.
È necessario uno dei parametri della divisione di essere un galleggiante in modo che il risultato sia un galleggiante. È possibile farlo lanciando uno di loro ad un galleggiante.
double verH = (double)hoogtePlaatje/breedtePlaatje;
o
double verH = hoogtePlaatje/(double)breedtePlaatje;
il C # spec per quanto riguarda la divisione .
Quando si divide due numeri interi, C # utilizza divisione intera , dove viene scartata la parte frazionaria . Nel tuo caso che stai ricevendo:
500 / 800 = 0 + 5/8
Il che, scartando la parte frazionaria, dà:
500 / 800 = 0
Per ottenere la divisione in virgola mobile, gettato uno degli argomenti a uno double
, float
o decimal
a seconda del livello di precisione è necessario, che farà sì che l'altro argomento da convertito in modo implicito dello stesso tipo e la divisione effettuata utilizzando floating point regole invece di regole interi, ad esempio
double result = (double)breedtePlaatje / hoogtePlaatje ;
Non ho mai usato C #, ma probabilmente è necessario lanciare una delle variabili di raddoppiare, in questo modo:
double verH = (double)hoogtePlaatje/breedtePlaatje;
Prova questo:
double verH = double (hoogtePlaatje) / breedtePlaateje;
Se si divide un int da un int, si otterrà una risposta troncata. Fusioni uno di loro fino ad un doppio, e l'intera divisione sarà fatta come doppio.