int totalOptCount = 500;
int totalRespCount=1500;
float percentage =(float)(totalOptCount/totalRespCount);
Почему это всегда возвращает значение 0.0? Также я хочу отформатировать это в формате 00.00 и преобразовать в строку?
int totalOptCount = 500;
int totalRespCount=1500;
float percentage =(float)(totalOptCount/totalRespCount);
Почему это всегда возвращает значение 0.0? Также я хочу отформатировать это в формате 00.00 и преобразовать в строку?
Поскольку преобразование в float происходит после завершения деления. Вам нужно:
float percentage = ((float) totalOptCount) / totalRespCount;
Вы должны иметь возможность форматировать, используя что-то вроде:
String str = String.format("%2.02f", percentage);
Если вы используете значения int
, использование double
может быть лучшим выбором и иметь меньшую ошибку округления. float
может представлять значения int
без ошибок до ~ 16 миллионов. double
может точно представлять все значения int
.
double percentage =(double) totalOptCount / totalRespCount;
Процент обычно умножается на 100, что означает, что вы можете бросить бросок.
double percentage = 100.0 * totalOptCount / totalRespCount;
Целочисленное деление (включающее long, short, byte, char, int) в Java всегда возвращает int (или длинный, если один из параметров длинный), округляя до нуля. Ваше преобразование происходит после этого вычисления.
(На вопрос о форматировании уже отвечают другие ответы - в качестве альтернативы вы также можете посмотреть java.text.NumberFormat, особенно java.text.DecimalFormat.)
String.format("%2.02f", (float)totalOptCount/totalRespCount);
чтобы отформатировать двойной и распечатать в процентах, вы можете использовать
System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%"));
(totalOptCount/totalRespCount)
здесь оба дивиденда и делителя имеют тип int
, что означает, что они разрешат только целочисленные значения, а ответ такого уравнения всегда будет целым литералом.
Если я сломаю это, это будет что-то вроде ниже
(double)(500/1500)
В соответствии с фактическим расчетом 500/1500 даст вам 0.33333, но компилятор преобразует его в целочисленный литерал, потому что оба операнда имеют тип int
(double)(0)
Компилятор получает инструкцию, чтобы сделать это значение 0
двойным, и вы получили 0.0
как результат
0.0
а затем вы можете изменить результат в любом формате, как это было предложено @Zach Janicki.
помните, что оба операнда одного типа, чем результат, будут иметь одинаковый тип.