Вопрос-ответ

Why does the division of two integers return 0.0 in Java? [duplicate]

Почему деление двух целых чисел возвращает 0.0 в Java?
int totalOptCount = 500;
int totalRespCount=1500;
float percentage =(float)(totalOptCount/totalRespCount);

Почему это всегда возвращает значение 0.0? Также я хочу отформатировать это в формат 00.00 и преобразовать в строку?

Переведено автоматически
Ответ 1

Потому что преобразование в float происходит после завершения деления. Вам нужно:

float percentage = ((float) totalOptCount) / totalRespCount;

Вы должны иметь возможность форматировать, используя что-то вроде:

String str = String.format("%2.02f", percentage);
Ответ 2

Если вы используете int значения, использование double может быть лучшим выбором и иметь меньшую ошибку округления. float может представлять int значения без ошибок до ~ 16 миллионов. double может точно представлять все int значения.

double percentage =(double) totalOptCount / totalRespCount;

Проценты обычно умножаются на 100, что означает, что вы можете отказаться от приведения.

double percentage = 100.0 * totalOptCount / totalRespCount;
Ответ 3

(totalOptCount/totalRespCount)


здесь и dividend , и divisor имеют тип int, что означает, что они допускают только целочисленные значения, и ответом такого уравнения всегда будет целочисленный литерал.

если я нарушу это, это будет что-то вроде приведенного ниже


(double)(500/1500)


Согласно фактическому вычислению, 500/1500 даст вам 0.33333, но компилятор преобразует это в целочисленный литерал, потому что оба операнда имеют тип int


(double)(0)



Компилятор получает инструкцию преобразовать это 0 значение в double, чтобы вы получили 0.0 в результате


0.0


а затем вы можете изменить результат в любой формат, как предложил @Zach Janicki.

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

Ответ 4

Целочисленное деление (которое включает long, short, byte, char, int) в Java всегда возвращает int (или long, если один из параметров имеет значение long) с округлением до нуля. Ваше преобразование происходит после этого вычисления.

(На вопрос о форматировании уже дан ответ в других ответах - в качестве альтернативы вы также можете взглянуть на java.text.NumberFormat , особенно java.text.DecimalFormat.)

java