2013-06-15 3 views
-1

Почему нет «int total = (mark/total) * 100;» за работой? Когда я ввел 25 и 50, которые должны быть на 50% после того, как он подсчитает 25/50 * 100. Но это показало 0%, а это очень странно. Какие-либо предложения??Простая математика не отображается, как ожидалось?

public class MarksCalculator { 
     private static Scanner kb = new Scanner(System.in); 

     public static void main (String[]args) { 

      int mark = 0, overall = 0; 

      //System.out.print("Hello Deepo! To calculate the marks enter value (percantage) of the task: "); 
      //int weight = kb.nextInt(); 

      System.out.print("Enter your marks for this Task/Assesment/Test: "); 
      mark = kb.nextInt(); 

      System.out.print("What was this mark out of: "); 
      overall = kb.nextInt(); 

      int total = (mark/overall) * 100; 

      System.out.println("You have scored " + total + "% with this assesment."); 
} 
} 
+4

Поскольку 25/50 находится в 'int' расчетов 0. Бросьте одну сторону в двойную (другая будет неявно брошена). – Maroun

ответ

2

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

int total = 100 * mark/overall; 
+0

Это работает, но это странно. Почему бы не отметить/полностью * 100, если у вас есть веская причина? – Shuvo0o

+0

@ Shuvo0o Потому что 'mark/total' будет сначала оценен до 0, поэтому его умножение на 100 будет ... 0. – Maroun

+0

Ahh ok это имеет смысл. Благодаря! – Shuvo0o

3

Вы должны бросить в два раза:

double total = ((double)mark/overall) * 100; 

От Chapter 15:

Если продвигаемый тип INT или длинный, то целочисленная арифметика выполняется .

+0

Где "целочисленная арифметика", определенная в JLS? – ingyhere

+0

@ingyhere http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17 (см. 15.17.2) –

+0

Да, я это видел. В нем говорится: «Если продвинутый тип int или long, тогда выполняется целочисленная арифметика». Тем не менее, он не предоставляет ссылочного или явного определения для «целочисленной арифметики», или я не могу его найти. Я думаю, что мы знаем, что это такое, но я удивлен, что JLS не дает ссылки на Кнута или что-то в этом роде. – ingyhere

Смежные вопросы