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 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;
(double) (a / b)
, когда a
и b
являются целыми числами, это не то же самое, что (double) a / b
Вы хотите позже.
- person Peter Lawrey; 28.05.2016
(totalOptCount/totalRespCount)
здесь и делимое, и делитель имеют тип int
, что означает, что они допускают только целочисленные значения, и ответом такого уравнения всегда будет целочисленный литерал.
если я сломаю это, это будет что-то вроде ниже
(double)(500/1500)
Согласно фактическому расчету, 500/1500 даст вам 0,33333, но компилятор преобразует это в целочисленный литерал, потому что оба операнда имеют тип int.
(double)(0)
Компилятор получает указание привести это значение 0
к удвоению, чтобы в результате вы получили 0.0
0.0
а затем вы можете изменить результат на любой формат, предложенный @Zach Janicki.
имейте в виду, что если оба операнда имеют одинаковый тип, то и результат будет того же типа.
Целочисленное деление (включая long, short, byte, char, int) в Java всегда возвращает целое число (или long, если один из параметров длинный) с округлением до нуля. Ваше преобразование происходит после этого расчета.
(На вопрос о форматировании уже ответили другие ответы - в качестве альтернативы вы также можете посмотреть java.text.NumberFormat, особенно java.text.DecimalFormat.)
чтобы отформатировать двойной и распечатать в процентах, вы можете использовать использование
System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%"));