Выход равен нулю при делении?

Может быть, я не вижу очевидной вещи, но:

int x1 = 2;
int y1 = 4;
int x2 = 11;
int y2 = 7;
double res = (y2-y1)/(x2-x1);
System.out.println(res);

Выход:

0.0

Почему?


person rocknow    schedule 30.10.2012    source источник
comment
попробуй double res = (y2-y1)/((double)x2-x1);   -  person irrelephant    schedule 31.10.2012


Ответы (4)


вам нужно изначально определить эти переменные как двойные, и это должно работать.

person neilb    schedule 30.10.2012
comment
вы также можете привести результат к double - person doublesharp; 31.10.2012
comment
@doublesharp приведения результата недостаточно, но вы также можете привести первый операнд - person John Dvorak; 31.10.2012
comment
@JanDvorak вот что я хотел сказать, но не сказал. - person doublesharp; 31.10.2012

Проблема в том, что вы занимаетесь целочисленной арифметикой. Вам нужно приведение типов, чтобы сначала преобразовать числитель или знаменатель в число с плавающей запятой (например):

int x1 = 2;
int y1 = 4;
int x2 = 11;
int y2 = 7;
double res = (double)(y2-y1)/(x2-x1);
System.out.println(res);

Если вы выполняете деление на целые числа, результат усекается до ближайшего целого числа (что дает тот же результат, что и операция с полом). Например:

0 / 2 == 0
1 / 2 == 0
2 / 2 == 1
3 / 2 == 1

и т.п.

person stevevls    schedule 30.10.2012

пытаться

int x1 = 2;
int y1 = 4;
int x2 = 11;
int y2 = 7;
double res = (double)(y2-y1)/(x2-x1);
System.out.println(res);

Вы должны упаковать его «во время» выполнения операции, а не после

person Valentino Ru    schedule 30.10.2012

приведите (y2-y1)/(x2-x1) к удвоению, как показано ниже:

                    int x1 = 2;
            int y1 = 4;
            int x2 = 11;
            int y2 = 7;
            double res = (double)(y2-y1)/(x2-x1);
            System.out.println(res);

Output: 0.3333333333333333
person PermGenError    schedule 30.10.2012