Разделение в c # идет не так, как я ожидаю
Вопрос
Я пытаюсь написать что-нибудь, чтобы мои изображения отображались правильно.У меня есть 2 номера "breedtePlaatje" и "hoogtePlaatje".Когда я загружаю эти 2 переменные со значениями, я получаю обратно "800" и "500", я ожидаю, что "верх" будет равен (500/800) = 0,625.Тогда значение verH = 0..
Это и есть код:
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;
}
}
Любые советы относительно моего подхода также были бы прекрасны.
Решение
Деление int на int дает int.
double verH = (hoogtePlaatje/breedtePlaatje);
Правая часть присваивания представляет собой целочисленное значение.
Измените breedtePlaatje и / или hoogtePlaatje на double, и вы получите ожидаемый ответ.
Другие советы
Целочисленное деление приведет к тому, что в качестве результата деления будет возвращено целое число.
Вам нужно, чтобы один из параметров деления был float, чтобы результат был float .Вы можете сделать это, поместив один из них в поплавок.
double verH = (double)hoogtePlaatje/breedtePlaatje;
Или
double verH = hoogtePlaatje/(double)breedtePlaatje;
Видишь спецификация C # что касается разделения.
Когда вы делите два целых числа, C # использует целочисленное деление, где дробная часть отбрасывается.В вашем случае вы получаете:
500 / 800 = 0 + 5/8
Который, отбрасывая дробную часть, дает:
500 / 800 = 0
Чтобы получить деление с плавающей запятой, приведите один из аргументов к любому double
, float
или decimal
в зависимости от необходимого вам уровня точности, что приведет к неявному преобразованию другого аргумента в тот же тип и делению, выполняемому с использованием правил с плавающей запятой вместо правил целых чисел, например
double result = (double)breedtePlaatje / hoogtePlaatje ;
Я никогда не использовал C #, но, вероятно, вам нужно будет преобразовать одну из переменных в double, вот так:
double verH = (double)hoogtePlaatje/breedtePlaatje;
Попробуй это:
double verH = double (hoogtePlaatje) / breedtePlaateje;
Если вы разделите значение int на значение int, вы получите усеченный ответ.Разыграйте один из них до двойного, и все деление будет выполнено как двойное.