Двойное значение возвращает 0

Вот пример:

Double d = (1/3);
System.out.println(d);

Это возвращает 0, а не 0,33333... как должно быть.

Кто-нибудь знает?


person oletk    schedule 14.12.2008    source источник
comment
@ΦXocę웃Пepeúpaツ Это не дубликат. Этот вопрос является дубликатом этого вопроса. Посмотрите на даты, прежде чем поставить отметку   -  person Zoe    schedule 16.07.2017


Ответы (3)


Это связано с тем, что 1 и 3 обрабатываются как integers, если не указано иное, поэтому 1/3 оценивается как integer 0, которое затем преобразуется в double 0. Чтобы это исправить, попробуйте (1.0/3) или 1D/3 явно указать, что вы имеете дело с двойными значениями.

person Firas Assaad    schedule 14.12.2008

Если у вас есть int, которые вы хотите разделить с помощью деления с плавающей запятой, вам придется преобразовать int в double:

double d = (double)intValue1 / (double)intValue2

(На самом деле, я считаю, что только приведения intValue2 должно быть достаточно, чтобы intValue1 автоматически преобразовалось в double.)

person coobird    schedule 14.12.2008

Используйте double, а не Double, если вам не нужно использовать эти значения в объектном смысле. Помните о концепциях Autoboxing.

person Vijay Dev    schedule 14.12.2008
comment
ОП спрашивал о методах усечения Java и о том, почему усекается деление целых чисел, даже если оно хранится в двойном; не про автобокс. - person ameed; 23.07.2013