Вопрос

Я пытаюсь написать что-нибудь, чтобы мои изображения отображались правильно.У меня есть 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, вы получите усеченный ответ.Разыграйте один из них до двойного, и все деление будет выполнено как двойное.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top